【问题标题】:Special escaping for crontabcrontab 的特殊转义
【发布时间】:2014-06-07 10:09:46
【问题描述】:

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

【问题讨论】:

  • 你有没有尝试像date +\%F一样逃避它
  • 顺便说一句,这个问题在另一个网站上会更合适,例如,superuser.comunix.stackexchange.com(因此关闭请求)。
  • 记录在 crontab(5) 手册页中。
  • +\%F 成功了。我会再次询问 unix 堆栈交换,以便答案可以记录在案,但有没有一种干净的方法可以在这里关闭它?
  • 既然您已经有了答案,那么在另一个网站上询问它是没有用的(尤其是这可能是一个常见问题解答,因此您的问题可能会被标记为重复)。让一切保持原样!繁荣会告诉我们。

标签: bash cron crontab rhel


【解决方案1】:

正如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-$(hostname)-$(date +\%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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    • 2016-05-01
    • 2019-01-29
    • 2018-07-16
    相关资源
    最近更新 更多