crontab 调度规则误解

crontab 调度规则误解

我遇到了一条规则出现意外的奇怪行为。

*/40 * * * * myshellcommand here

我以为它会每 40 分钟运行一次,例如

00.00
00.40
01.20
02.00
etc

但它运行

00.00
00.40
01.00
01.40
02.00
etc.

有人知道可能出了什么问题吗?

答案1

一切正常。它按预期工作。* 会在每小时/天/月开始时重置。换句话说,* 代表所讨论值的最大范围。因此,分钟列中的 * 代表 0-59,而 */40 表示“从 0 开始,每 40 分钟运行一次,直到 59”。请参阅cron 维基百科页面了解更多信息。

您可能需要每 20 分钟运行一次该作业,并让程序决定是否应该运行。或者,用两行代码执行

0,40 0,2,4,6,8,10,12,14,16,18,20,22 * * * myshellcommand
20   1,3,5,7,9,11,13,15,17,19,21,23 * * * myshellcommand

请注意,这可以写成稍微更紧凑的形式:

0,40 */2    * * * myshellcommand
20   1-23/2 * * * myshellcommand

在这种情况下,*/2 表示从 0 开始每隔一小时(因为 * 相当于 0-23),而 1-23/2 表示从 1 点开始每隔一小时。

相关内容