如何安排每两周一次的 cronjob?

如何安排每两周一次的 cronjob?

crontab(5) 定义以下字段:

       field         allowed values
       -----         --------------
       minute        0-59
       hour          0-23
       day of month  1-31
       month         1-12 (or names, see below)
       day of week   0-7 (0 or 7 is Sun, or use names)

并解释道:

 Step values can be used in conjunction with ranges.  Following a range
 with ``/<number>'' specifies skips of the number's value through the
 range.  For example, ``0-23/2'' can be used in the hours field to specify
 command execution every other hour (the alternative in the V7 standard is
 ``0,2,4,6,8,10,12,14,16,18,20,22'').

所以,据我所知,没有双周工作。我很确定有解决方法,你有什么解决方法吗?还是我错过了什么?

答案1

许多 cron(您没有指定正在使用哪个)支持范围。因此,类似

0 0 1-7,15-21 * 3

将会在每月的第一和第三个星期三发生。

笔记:不要将其用于维克西·克朗(包含在 RedHat 和 SLES 发行版中),因为它使得或者在日期和星期几字段之间,而不是

答案2

您可以让 cron 每个星期三运行该程序,然后让该程序运行以确定是偶数周还是奇数周。例如:

#!/bin/bash
week=$(date +%U)
if [ $(($week % 2)) == 0 ]; then 
    echo even week
else 
    echo odd week
fi

答案3

如果你的需求不是每两周一次,那么你可以简单地在每月 1 号和 15 号运行 cronjob:

15 8 1,15 * * /your/script.sh

无论星期几,它都会在每月第一天和第十五号的上午 8:15 运行。

答案4

阿纳克隆是解决 cron 局限性的一个很好的方法。

  • Anacron 有一个复发期参数,您可以将其设置为 14。

周期延迟作业标识符命令

14 15 测试.daily /path/to/script.sh

相关内容