每周交替执行 cronjob(带步进值)

每周交替执行 cronjob(带步进值)

我想要一个 cronjob 在每月的第一个和第三个星期六运行,另一个 cronjob 在每月的第二个和第四个星期六运行。现在 crond 提供了“步进值”:

步长值可以与范围结合使用。在范围后面加上“”表示跳过该范围内的数字值。例如,可以在小时字段中使用“0-23/2”来指定每隔一小时执行一次命令(V7 标准中的替代方案是“0,2,4,6,8,10,12,14,16,18,20,22”)。星号后面也可以使用步长,因此如果您想表示“每两小时”,只需使用“*/2”即可。

但如果我使用

30 3 * * 6/2 command

这两个脚本每隔一个星期六都会(不确定地)运行。让它们交替运行的正确方法是什么?

我知道包装脚本的可能性,但如果有更优雅的解决方案,我想避免它。

答案1

由于您知道每个月的前 7 天只会出现一个星期六,因此您可以遵循该模式并使用该day-of-month字段将每项工作分开:

30 3 1-7,15-21 * 6 script1
30 3 8-14,22-28 * 6 script2

因此script1总是会赶上第一个和第三个星期六并且script2总是会赶上第二个和第四个星期六。

答案2

为什么不使用 cron#?

30 3 * * 6#1 第一个和第三个命令
30 3 * * 6#3 第一个和第三个命令
30 3 * * 6#2 第二个和第四个命令
30 3 * * 6#4 第二个和第四个命令

井号 ( # ) '#' 可用于星期几字段,后面必须跟一个 1 到 5 之间的数字。它允许您指定诸如给定月份的“第二个星期五”之类的结构

http://en.wikipedia.org/wiki/Cron

相关内容