What's wrong with my cronjob syntax, I'm trying to use a backtick (`)?

Solution 1:

From crontab(5):

The ``sixth'' field (the rest of the line) specifies 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 file. Percent-signs (%) in the command, unless escaped with backslash (), will be changed into newline characters, and all data after the first % will be sent to the command as standard input. There is no way to split a single command line onto multiple lines, like the shell's trailing "\".

Just add backslashes before % signs:

00 08 * * * psql -Uuser database < query.sql | mail [email protected] -s "query for `date +\%Y-\%m-\%dZ\%I:\%M`"

Solution 2:

To resolve the issue escape your % characters. date +%Y-%m-%d should be date +\%Y-\%m-\%d

Unfortunately this answer is a little late but the issues is not PATH or backticks - the issue is simply that the percent character '%' is a special character used to denote a NEWLINE or an STDIN in crontab entries.

This conflicts with the formatting input of the date command. As such a command that includes: date +%Y-%m-%d will be interpreted as:

date Y- m- d


Solution 3:

I had a lot of problems with backticks also. Sometimes you need more than one occurrence of quotes and backticks. Just replace them for $().

Example:

export NOW=`date`
by
export NOW=$(date)

-Gilson Soares

Tags:

Syntax

Cron