如何设置每72分钟运行一次定时任务(Cron Job)

17

我该如何设置定时任务(cron job)每72分钟执行一次?或者其他一些不太好看的时间间隔怎么办?


为什么一定要是72分钟? - Zifre
不必非得是一个漂亮的偶数,任何数字都可以。 - smith
7个回答

43

cron是基于时间而非间隔运行任务的,因此没有绝对简单的方法来实现需求。但你可以在crontab中设置多个行直到找到公共分母,虽然这有点繁琐。由于你需要每72分钟运行一次任务,因此它必须在以下时间执行:

  • 00:00
  • 01:12
  • 02:24
  • 03:36
  • 04:48
  • 06:00
  • 07:12
  • ...

如你所见,该模式每6小时重复5次。因此,在crontab中将有5行:

0  0,6,12,18  * * * 命令
12 1,7,13,19  * * * 命令
24 2,8,14,20  * * * 命令
36 3,9,15,21  * * * 命令
48 4,10,16,22 * * * 命令

当然,另一个选择是创建一个包装的守护进程或shell脚本,它执行并休眠所需的时间,直到停止。


26

使用at(man at)。让您的应用程序或启动脚本计算出未来72分钟的启动时间,并在开始工作之前安排自己再次运行。

在Windows XP和Vista上也可用。

以下是GNU/Linux的示例:at -f command.sh now + 72 minutes


1
s/安排它/安排自己再次运行/ - Dennis Williamson
1
希望这能成为被接受的答案。一旦你开始了工作,它就可以在每次运行时重新安排自己。然而,你可能会发现它与同步不上,所以确保你在脚本中将你的 at 任务作为第一件事而不是最后一件事重新安排。 - Adam Hawes

4
不要使用cron...
#!/bin/sh
while [ true ] 
do
     sleep 4320
     echo "Put your program here" &
done

1
如果程序崩溃了,要小心,你需要重新启动它。此外,在机器重启后,程序将不会运行,你需要启动它。 - Adrian Smith
最好将其制作为守护进程,并使用例如monit来保持其运行。 - mahemoff

4

您可以随时采用每分钟触发cron的方法,并在脚本运行时间距离上次运行时间不超过72分钟时立即退出。


3
您无法直接从cron/crontab执行此操作。
Cron作业是按特定时间表运行的,而不是按特定间隔运行的。
一种替代方法是通过在午夜、1:12、2:24、3:36等时刻运行来近似您的“每72分钟”计划,并将其拉伸到近似于午夜。您的crontab文件可以将所有这些时间指定为要执行的时间。
另一种选择是让单独的应用程序处理调度并启动您的应用程序。

2
你需要设置恰好20个任务 - 比如在00:00设置一个,下一个在01:12,再下一个在02:24,以此类推。
20个迭代完成一天的任务。
不幸的是,这是唯一的方法,因为cron任务是事先按照固定的时间表设置的,而不是在上一个任务执行后“X分钟后”运行。

-7

嗯,我知道这有点晚了,但我正在查看一些调度问题并看到了这个问题。

只需在您的crontab中执行以下操作

*/72 * * * * /home/script.sh


1
这样做不行,分钟是0-59,超过30分钟的将在x分之后发布,例如34将在34分钟后发布,而不是每34分钟发布一次。 - omega1
我刚刚测试了一下,在CentOS 7下运行*/72 * * * * date >> cron-over-72.out的结果是该作业每小时运行一次,准时在整点运行。 - CODE-REaD

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接