9

I set up a cron job on my server running RedHat 4.1 to backup MySQL databases, and then upload to Amazon S3. The goal is to drop the .bz2 file in a folder corresponding with the day of the week. However, I'm getting the following error mailed to me by daemon.

Cron job:

MAILTO=backups@example.com
0       4       *       *       *       mysqldump --all-databases  -ubackups -pPassword | gzip > all-databases.sql.bz2; s3cmd put all-databases.sql.bz2 s3://backup_exampleserver.com/mysql_backups/`date +%A`/all-databases.sql.bz2

Error message:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``'
/bin/sh: -c: line 1: syntax error: unexpected end of file
1
  • 1
    I recommend to put this stuff in a regular shell script and then call this shell script from cron. This way, you can save you a lot of trouble and make the job a lot easier to understand and debug. – Sven Sep 12 '12 at 13:35
19

You need to escape the percent sign in your command with a backslash: \%, otherwise it is interpreted as the end of command.

From crontab(5):

The command field (the rest of the line) is the command to be run.  The
entire command portion of the line, up to a newline or % character, will
be executed by /bin/sh or by the shell specified in the SHELL variable of
the crontab.  Percent signs (‘%’) in the command, unless escaped with a
backslash (‘\’), will be changed into newline characters, and all data
after the first ‘%’ will be sent to the command as standard input.
1
  • Awesome, thank you for the clarification. New to cron, so much appreciated! – Jamie - eyespeak Sep 12 '12 at 13:43
3

Change this:

`date +%A`

to:

`date +\%A`
0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.