Answers:
您尝试的语法实际上是模棱两可的。根据一个月中有多少天,某些月份的运行时间可能是奇数天,偶数的几天。这是因为它的计算方式将可能性的总数除以了。您可以通过手动指定日期范围并使用奇数或偶数天来覆盖这种策略行为。由于偶数日脚本永远不会在较长月份的第31天运行,因此您不要以30天为偶数日的基础来放宽任何内容,并且通过专门指定将其划分为好像有31天就可以强制奇数天执行。
语法如下所示:
# Will only run on odd days:
0 0 1-31/2 * * command
# Will only run on even days:
0 0 2-30/2 * * command
您不必担心月份没有相同的天数,因为没有月份的天数可以超过此天,并且对于2月糟糕的日子,日期范围永远不会匹配最后一两天,但是拥有日期不会有任何危害它列出了。
此方法的唯一“陷阱”是,如果您处于奇数日周期,则在31天的几个月后,您的命令也会在该月的第一天运行。同样,如果您要强制一个偶数周期,则每个leap年将导致一个三天的周期和二月底。您无法真正避免这样一个事实,即“隔日”的任何常规模式并不总是会在每个月的偶数或奇数天下降,并且您以任何方式强迫这样做都会导致额外的运行或丢失两次运行之间的运行匹配天数不正确的月份。
0,2,4...,30,32,34
这并不重要,超出范围的值永远不会匹配。
0 0 2-30/2 * * command
可以正常工作。
我认为可能是使用一年中的某天,例如:
# for odd days
test $(((`date +%j` % 2))) != 0 && command
# for even days
test $(((`date +%j` % 2))) == 0 && command
已针对Unix和Linux系统进行了测试。
test $(($(date +%j) % 2)) == 0 && command
test $(($(date +%s) / 86400 % 2)) == 0 && command
让我们每天检查一下是否为“其他”:- bc
)(需要程序)
0 0 * * * test $(echo `date +%s` / 86400 % 2 == 0 |bc) -eq 0 && command
(我不确定代码是否正确显示。该date +%s
部分位于反撇号之间。)