如何根据bash查询形成cron任务?

时间:2013-08-01 20:16:20

标签: linux bash shell unix cron

我必须在crontab中执行此命令:

*/1 * * * * find /etc -type f \( ! -perm /o=w \) -exec sh -c "/bin/ls -hastl '{}' | tr '\n' ' '" \; -exec sh -c "/usr/bin/md5sum '{}' | cut -d ' ' -f 1 " \; > /tmp/crontable/daily/log/$(hostname)_$(date +"%F").log

但它没有做任何事情,cron没有执行这个命令,但是在普通shell中它运行良好,我在cron中做错了什么?其他cron任务运行良好。

2 个答案:

答案 0 :(得分:2)

%是crontabs中的特殊字符(它表示换行符)。尝试转义它:\%

来自man 5 crontab

  

该行的整个命令部分,直到换行符或%字符,将由/ bin / sh或SHELL中指定的shell执行          crontab文件的变量。除非使用反斜杠(\)进行转义,否则命令中的百分号(%)将更改为换行符,并且第一个%之后的所有数据将作为标准发送到命令          输入

答案 1 :(得分:0)

第一步是检查日志,通常是/var/log/syslog(ubuntu,debian)或类似日志。

有几个可能的原因,最常见的是缺少PATH。你能尝试添加不同命令的完整路径吗?例如:/usr/bin/find而不是find