Cron在单撇号上失败了

sha*_*nuo 7 unix cron

以下工作按预期工作:

date +'%d-%b-%Y-%H-%M'

28-Sep-2009-14-28

但是crontab中的以下4个条目都没有工作.

* * * * * date +\'%d-%b-%Y-%H-%M\' >> /backup/shantanu/testing.txt
* * * * * date +'%d-%b-%Y-%H-%M' >> /backup/shantanu/testing1.txt
* * * * * date +"%d-%b-%Y-%H-%M" >> /backup/shantanu/testing2.txt
* * * * * date +\"%d-%b-%Y-%H-%M\" >> /backup/shantanu/testing3.txt
Error:
/bin/sh: -c: line 0: unexpected EOF while looking for matching `"'
/bin/sh: -c: line 1: syntax error: unexpected end of file

我可以在shell脚本中保存相同的代码并设置cron,但我想知道是否可以直接为任务设置cron.

我试图设置的实际cron条目看起来像这样......

16 * * * * mysqldump myDB myTB > /backup/ABCbc$(date +'%d-%b-%Y-%H-%M').sql 2> /backup/ABCbc_errORS$(date +'%d-%b-%Y-%H-%M').txt

Gil*_*il' 21

与直接键入交互式shell的命令相比,cron作业命令的行为有四种常见原因:

  • Cron提供有限的环境,例如,最小的$PATH和其他预期的变量缺失.
  • Cron /bin/sh默认调用,而您可能以交互方式使用其他shell.
  • Cron %特别对待角色(它在命令中变成了换行符).
  • 该命令的行为可能不同,因为它没有可用的终端.

您必须在crontab文件中%使用a 前面的所有字符\,这告诉cron只需%在命令中添加一个,例如

16 * * * * mysqldump myDB myTB > "/backup/ABCbc$(date +'\%d-\%b-\%Y-\%H-\%M').sql" 2> "/backup/ABCbc_errORS$(date +'\%d-\%b-\%Y-\%H-\%M').txt"

(作为一个单独的问题,总是在a "$variable_substitution"或a 周围加上双引号"$(command substitution)",除非你知道为什么不在特定情况下这样做.否则,如果变量内容或命令输出包含空格,或者?*\[它们将由shell解释.)