在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
答案 0 :(得分:0)
您的逻辑是正确的。但是,存在一些语法问题。
Cron具有一个不错的功能,即%
标记命令的结尾和相应命令的/ dev / stdin的开头。所以你必须逃避它。
您的测试命令在方括号前后需要空格。
单引号不会进行命令替换
这可以归结为:
52 23 * * * [ "$(date +\%d -d tomorrow)" = "01" ] && /apps/scripts/test.sh
“第六个”字段(该行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或“%”字符,将由/ bin / sh或由SHELL变量中指定的shell执行。 cronfile。除非使用反斜杠(\)进行转义,否则命令中的“%”字符将变为换行符,并且第一个%之后的所有数据都将作为标准输入发送给命令。
来源:
man 5 crontab