我有一个每小时运行两次的 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 * * * * ... .