以下操作符合预期:
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
答案 0 :(得分:20)
与直接输入到交互式shell中的命令相比,cron作业命令的行为有四种常见原因:
$PATH
,以及其他预期变量缺失。/bin/sh
,而您可能会以交互方式使用其他一些shell。%
字符(在命令中将其转换为换行符)。您必须在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并将该命令作为参数传递。