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