![每周交替执行 cronjob(带步进值)](https://linux22.com/image/586178/%E6%AF%8F%E5%91%A8%E4%BA%A4%E6%9B%BF%E6%89%A7%E8%A1%8C%20cronjob%EF%BC%88%E5%B8%A6%E6%AD%A5%E8%BF%9B%E5%80%BC%EF%BC%89.png)
我想要一个 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 之间的数字。它允许您指定诸如给定月份的“第二个星期五”之类的结构