我想按小时运行一些工作,但不一定同时运行,我认为
0 * * * * job
指每小时 0 分整点运行。
我知道我也可以使用
@hourly job
如果有的话有什么区别?如何安排作业每小时运行一次,但不同时运行?
答案1
@hourly
:每小时运行一次,即。"0 * * * *"
。
所以它是完全一样的。
要在一个小时的不同时间点运行一个作业(或多个作业,以分散负载),您可以在开始作业之前休眠随机的时间:
@hourly sleep $((RANDOM / 10)); dowhatever
它会休眠长达 3276 秒(接近一个小时),然后运行作业。因此,每次cron
启动作业时,它都会在实际开始之前等待不同的时间。
答案2
@hourly
0 * * * *
是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
无论如何都会被执行。