Cron在单撇号上失败了

时间:2009-09-28 09:05:01

标签: 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

3 个答案:

答案 0 :(得分:20)

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

  • Cron提供有限的环境,例如最小$PATH,以及其他预期变量缺失。
  • 默认情况下,Cron会调用/bin/sh,而您可能会以交互方式使用其他一些shell。
  • Cron特别处理%字符(在命令中将其转换为换行符)。
  • 该命令的行为可能不同,因为它没有可用的终端。

您必须在crontab文件中的所有%个字符前加\,这告诉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"

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

答案 1 :(得分:0)

只要日期中作为参数提供的格式字符串中没有空格,您根本不需要勾号。

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

应该有用。

答案 2 :(得分:-1)

您正在使用/ bin / sh不支持的语法。尝试调用您的首选shell并将该命令作为参数传递。