在本月最后一个星期一运行的 cron 作业

oz1*_*123 5 cron

我需要在每个月的最后一个星期一启动一些 cron 脚本。

我想知道组合范围是否可以完成这项工作,例如:

8 04 19-26  *  2     $HOME/bin/mailstub
Run Code Online (Sandbox Code Playgroud)

我希望我做对了,我的 cron 工作只会在每个月的 19 到 26 周之间运行一次。

很高兴听到人们的评论,

我使用的是 CentOS 5.6 - 所以在某些地方(例如维基百科)中提到的 L 构造在我的系统上不起作用。

提前致谢,

盎司

小智 10

您的 cron 作业将在星期二(第 5 个字段,星期几,0 或 7 是星期日)运行,而不总是在该月的最后一个星期二。最好使用:

8 04 * * 1 [ $(date +"\%m") -ne $(date -d 7days +"\%m") ] && $HOME/bin/mailstub
Run Code Online (Sandbox Code Playgroud)

这将检查今天的月份是否不等于 7 天后的月份。如果不相等,则为该月的最后一个星期一。


小智 3

设置为每天多次。你要:

0 8 04 19-26 * * 周一 $HOME/bin/mailstub

它将在 19 日至 26 日之间的任何一天(每年任何月份的星期一)的 8:04:00 开始。

但是,如果是 19 日星期一,则为 26 日星期一。因此,您希望在 19 日至 25 日期间购买

0 8 04 19-25 * * 周一 $HOME/bin/mailstub

因此,这应该在每月的星期一发生一次。但是,不能保证(或可能)是最后一个星期一。如果您需要将其放在最后,并且 L 语法不起作用,则需要将逻辑编程到被调用的脚本中。这很容易用 python 完成,但超出了这个问题的范围。