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

Fre*_*ers 8 cron scheduling

我有我想每小时运行的工作,但不一定同时运行,我认为

0 * * * * job 
Run Code Online (Sandbox Code Playgroud)

表示在点上每小时的 0 分钟运行。

我知道我也可以使用

@hourly job
Run Code Online (Sandbox Code Playgroud)

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

Ste*_*itt 13

来自crontab(5)

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

所以它是完全一样的。

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

@hourly sleep $((RANDOM / 10)); dowhatever
Run Code Online (Sandbox Code Playgroud)

这最多休眠 3276 秒(将近一个小时),然后运行作业。所以每次cron开始工作时,它在实际开始之前等待的时间不同。

  • 模数会有一点偏差,但不会太大,可能在 10% 左右。一个更大的问题是在 crontab 中使用“%”,因为它需要反斜杠转义。 (2认同)

hee*_*ayl 6

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

来自man 5 crontab

string         meaning
------         -------
@hourly        Run once an hour, "0 * * * *".
Run Code Online (Sandbox Code Playgroud)

请注意,cron我所拥有的 Vixie Cron总共支持 8 个特殊字符串。