@hourly vs 0 * * * * - Cron - 如何每小时但在不同时间运行作业

@hourly vs 0 * * * * - Cron - 如何每小时但在不同时间运行作业

我想按小时运行一些工作,但不一定同时运行,我认为

0 * * * * job 

指每小时 0 分整点运行。

我知道我也可以使用

@hourly job

如果有的话有什么区别?如何安排作业每小时运行一次,但不同时运行?

答案1

crontab(5)

@hourly:每小时运行一次,即。"0 * * * *"

所以它是完全一样的。

要在一个小时的不同时间点运行一个作业(或多个作业,以分散负载),您可以在开始作业之前休眠随机的时间:

@hourly sleep $((RANDOM / 10)); dowhatever

它会休眠长达 3276 秒(接近一个小时),然后运行作业。因此,每次cron启动作业时,它都会在实际开始之前等待不同的时间。

答案2

@hourly0 * * * *是in的同义词crontab,没有区别。@hourly是 的特殊字符串表示形式0 * * * *

man 5 crontab

string         meaning
------         -------
@hourly        Run once an hour, "0 * * * *".

cron需要注意的是,我的 Vixie Cron总共支持 8 个特殊字符串。

答案3

只是想分享 Jenkins Cron/定期构建方法。很高兴在常规 Cron 中看到类似的内容,其中 H(hash) 是一个选项

Examples:

# every fifteen minutes (perhaps at :07, :22, :37, :52)
H/15 * * * *
# every ten minutes in the first half of every hour (three times, perhaps at :04, :14, :24)
H(0-29)/10 * * * *
# once every two hours at 45 minutes past the hour starting at 9:45 AM and finishing at 3:45 PM every weekday.
45 9-16/2 * * 1-5
# once in every two hours slot between 9 AM and 5 PM every weekday (perhaps at 10:38 AM, 12:38 PM, 2:38 PM, 4:38 PM)
H H(9-16)/2 * * 1-5
# once a day on the 1st and 15th of every month except December
H H 1,15 1-11 *

答案4

您还可以使用以下方式明确限制您的时间界限模运算符
如果您想将启动时间限制为最长 10 分钟(600 秒),请执行以下操作:

$RANDOM % 600将产生 0 到 600 之间的结果:

@hourly sleep $(( $RANDOM % 600 )) && /path/to/your/script

在这里使用&&,因为sleep无论如何都会被执行。

相关内容