设置一个cronjob,每隔N天运行一次,并以特定日期为开始

时间:2016-12-29 11:14:21

标签: shell curl cron

我需要设置一个每5天运行一次的cronjob,但我需要它在特定日期开始。

例如,它将每5天执行一次卷曲,但我希望第一次执行是下周。

这是可能还是我应该等待当天的设置呢?

1 个答案:

答案 0 :(得分:1)

某些cron实施可能会为您提供当天的*/5语法,甚至是16-31/5语法含义"从16日开始每5天发布一次"。

第一个问题是,接下来的几个月你需要第二个*/5条目。这种语法的第二个问题是你的脚本将在每个月的1日,6日,11日,16日,21日,26日和31日触发。这些固定的日子通常不是每隔5天就会发生一次"每隔一天#34;

您的解决方案是每天使用cron触发您的工作(可能从您选择的第一天开始)并在您的脚本中进行初步计算,以确定您是否是您的第一天天期。如果没有,请立即使用exit 0结束脚本。

此测试可能与(在bash)中一样简单:

(( $(date +"%j") % 5 == 0 )) || exit 0

请注意,使用这样一行,如果一年中的某一天是5的倍数,则会执行该脚本。对于*/5中的crontab,这可能不是每5天一次一年的变化,但它是一个非常好的近似。你有这个想法,你可能会做得更好。

[update]这当然可以添加到cron执行的命令中:

SHELL=/bin/bash
mn h * * * (( $(date +"%j") % 5 == 0 )) && my_command