我的cronjob语法有什么问题,我正在尝试使用反引号(`)?

这是我想自动化的:

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

这里是错误信息:

 /bin/sh: -c: line 0: unexpected EOF while looking for matching ``' /bin/sh: -c: line 1: syntax error: unexpected end of file 

从crontab(5) :

“第六”字段(行的其余部分)指定要运行的命令。 行的整个命令部分,直到换行符或%字符,将由/ bin / sh或由crontab文件的SHELLvariables中指定的shell来执行。 命令中的百分号(%),除非用反斜线()转义,否则将被改为换行符,并且第一个%之后的所有数据将作为标准input发送到该命令。 没有办法将单个命令行分割成多行,如shell的尾部“\”。

只需在%符号前添加反斜杠即可:

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

反引起了很多问题。 有时你需要多于一次的引号和反引号。 只需将它们replace为$()。

例:

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

-Gilson Soares

要解决该问题,请跳过您的%字符date +%Y-%m-%d应该是date +\%Y-\%m-\%d

不幸的是,这个答案有点晚了,但问题不是PATH或反引号问题 – 只是百分号字符'%'是用来表示NEWLINE或crontab条目中的STDIN的特殊字符

这与date命令的格式化input冲突。 这样的命令包括: date +%Y-%m-%d将被解释为:

date Y- m- d

这与棒棒无关。 可怕的是,cron没有看到PATH,你必须告诉cron“PATH是什么?” 反复cron脚本。

 PATH=/bin:/usr/bin:/usr/sbin * * * * * /your/script/here 

而且我赞成将这个命令写入一个文件,而不是直接在cron行中传递命令。 有更多的优雅

 * * * * * /your/script/here 

 * * * * * perl -e '$@#$@$%%@' | grep -e '@#$@$#$@' | sed s/asfdf/asdfa/ 

这些行可以进入一个文件,chmod + x文件,并且这个文件被调用。