特别为crontab逃脱

时间:2014-04-22 20:36:49

标签: bash cron crontab rhel

我在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脚本中,但对于那些寻找文件的人来说,这更容易阅读。

1 个答案:

答案 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