Cron 作业运行的频率比我想象的要高

Cron 作业运行的频率比我想象的要高

我有一个每小时运行两次的 cron 作业。它在 HH:00 运行一次,在 HH:45 运行一次。这很奇怪,因为我试图指定它应该每 45 分钟运行一次,如下所示:

*/45 * * * * python my_job.py

这对于我每 5 分钟运行一次的其他作业以及每 20 分钟运行一次的作业来说效果很好。然而,我想知道一小时不能被 45 分钟整除这一事实是否会导致奇怪的行为。为什么使用此设置我的 cron 作业每小时运行两次?

答案1

您的作业每分钟运行一次,即 45 的倍数,即每当minute % 45 == 0。因此它将在 hh:00 和 hh:45 运行。

如果它是 60 的精确因数,则它将以均匀大小的间隔运行。

为了使其以 45 分钟的间隔运行,我认为您需要三个规则,每个规则一个小时(mod 3)。

虽然我还没有尝试过,但我相信以下方法会起作用:

0,45 0-23/3 * * * /usr/local/bin/myjob
30   1-23/3 * * * /usr/local/bin/myjob
15   2-23/3 * * * /usr/local/bin/myjob

答案2

通过 cron 执行此操作的粗略方法是:

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

一种更优雅的方法是修改脚本,使其具有时间感知能力,并根据每 15 分钟运行一次的 cron 条目进行自我检查:

    */15 * * * * ... . 

相关内容