我在RHEL 6计算机上有以下用户crontab条目(敏感值已被替换):
MAILTO=cron-errors@organisation.com
0 5 * * * ~/bin/app_state.sh host-arg 9200 > ~/state/app-state-$(hostname)-$(date +%F).json
在/var/log/cron
中生成此条目:
Apr 23 05:00:08 host CROND[13901]: (dbjobs) CMD (~/bin/app_state.sh host-arg 9200 > ~/state/app-state-$(hostname)-$(date +)
但没有文件。
将声明更改为:
43 5 * * * ~/bin/app_state.sh host-arg 9200 > ~/state/app-state-static.json
我获得了更好的日志条目,文件在~/state/app-state-static.json
我确定有一些问题没有逃避+%F
,但在我的生活中不能找到我应该如何逃避它的细节。我可以将文件名生成包装在另一个shell脚本中,但对于那些寻找文件的人来说,这更容易阅读。
答案 0 :(得分:0)
正如crontab tag wiki所说,百分比字符在crontab中是有问题的; %被转换为换行符:
[..] > ~/state/app-state-$(hostname)-$(date +%F).json
将命令运行为
[..] > ~/state/app-state-$(hostname)-$(date +\nF).json
“转义”百分号是可能的,但是转义字符会在命令中执行。像以下这样的工作将在百分号前使用\来运行命令。
0 5 * * *〜/ bin / app_state.sh host-arg 9200>〜/ state / app-state-$(主机名)-$(日期+ \%F).json
规避此问题的一种方法是将命令包含在脚本中,并将其作为cron作业执行:
/usr/local/bin/app_state_cron.sh:
#!/bin/sh
~/bin/app_state.sh host-arg 9200 > ~/state/app-state-$(hostname)-$(date +%F).json
crontab中的一个:
0 5 * * * /bin/sh /usr/local/bin/app_state_cron.sh