如何在每月的最后一天在RHEL 7.2上运行cron

时间:2019-02-18 11:09:43

标签: cron rhel7

在RHEL 7.2中,如何在当月的最后一天运行cronjob。尝试以下方法。但是没有用。截至目前,为了测试我的脚本,只需触摸一个位置上的文件。当我在cronjob中使用日期函数时,它不起作用。但是使用正常的crontab参数,它可以正常工作。

52 23 28-31 * * ['$(/usr/bin/date +%d -d tomorrow)' == '01' ] && sh /apps/scripts/test.sh
52 23 * * * [ $(date +\%d) -eq $(echo $(cal) | awk '{print $NF}')] && /apps/scripts/test.sh
45 23 * * * [[ $(date +'%d') -eq $(cal | awk '!/^$/{ print $NF }' | tail -1) ]] && /apps/scripts/test.sh >/dev/null 2>&1

1 个答案:

答案 0 :(得分:0)

您的逻辑是正确的。但是,存在一些语法问题。

  1. Cron具有一个不错的功能,即%标记命令的结尾和相应命令的/ dev / stdin的开头。所以你必须逃避它。

  2. 您的测试命令在方括号前后需要空格。

  3. 单引号不会进行命令替换

这可以归结为:

52 23 * * * [ "$(date +\%d -d tomorrow)" = "01" ] && /apps/scripts/test.sh
  

“第六个”字段(该行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或“%”字符,将由/ bin / sh或由SHELL变量中指定的shell执行。          cronfile。除非使用反斜杠(\)进行转义,否则命令中的“%”字符将变为换行符,并且第一个%之后的所有数据都将作为标准输入发送给命令。

     

来源:man 5 crontab