我需要添加一个 crontab 条目,该条目每季度运行一次,即第二个星期日凌晨 02 点。
下面哪一项是正确的?操作系统是AIX。
00 02 8-14 */3 0 && /myscript.sh
或者
00 02 8-14 */3 * [ "$(date '+\%a')" == "Sun" ] && /myscript.sh
答案1
分钟、小时和月份正确。
星期几和月份之间存在交互作用。您的第一个版本将在 8 日到 14 日每天运行,和每个星期日(但如果 11 号是星期日,则不会两次)。
从man -s 5 crontab
:
注意:命令执行的日期可以由两个字段指定 - 月份中的某一天和星期几。如果两个字段都受到限制(即不是 *),则当任一字段与当前时间匹配时将运行该命令。
您的第二个版本可能有两个问题:
(1) 它可以由 /bin/sh 运行,或者由 crontab 中指定的某个 shell 运行。我不确定它==
的便携性如何。
(2) “Sun”是特定于语言环境的。
我可能会用 回避这些[ "$( date '+\%u')" -eq 7 ]
,但用评论解释。
这导致
00 02 8-14 1,4,7,10 * [ "$(date '+\%u')" -eq 7 ] && /myscript.sh