安排工作每23分钟运行一次

有时我需要以更复杂的方式运行Cron能够提供的预定作业。 说,安排一个工作每23或65分钟运行一次。

在后一种情况下,可以通过添加多个Cron条目来运行同一行。 在第一种情况下,添加的行数变得太多了。

三个明显的解

  • 每分钟运行一次; 使用作业自己的逻辑来推断它应该在什么时候真正运行并保持它的状态(比如在一个文件中)
  • 在脚本中使用“sleep”可以暂停指定的时间,并使用Supervisor等工具保持运行
  • 使用任何能够以任意周期运行进程的实用程序(例如监视实用程序),并使用该实用程序启动任务

但在某些情况下,这些都是不方便的。

是否有更聪明的Cron替代品,至less可用于POSIX系统,能够使用任意时间表?

要每23分钟运行一次工作,以下操作将不起作用:

* / 23 * * * * / some / command

因为这将在00:00,00:23运行,然后23分钟后再次在00:46,然后再次在14分钟后的01:00,而不是每隔23分钟。

其原因在于, 每当分钟数(从“午夜”起)是23的倍数时/ in */23 不是 数字”除以“并且不匹配

*/23是一个“增量” 。 这告诉cron匹配分钟数0 1 2 3 4 5 6 7 8 9 10 11 ... 59 (其中*是简写)即分钟0,23 0, 23 & 46中的每23个项目/23 )。

该增量行为还允许您移动偏移,即通过在1而不是0开始范围:

 1-59/23 * * * * /some/command 

这项工作现在每小时运行一次,过去分钟,过去二十 分钟,过去一小时再过四十七分钟。


我同意你的评价,对于奇数时间表cron语法是不够的。

Cron是一个非常简单的时间驱动调度器。

我假设你可能想每23分钟运行一次你的工作,因为这是你的批处理作业的运行时间的总和,并增加了一些安全边界?

你的select是简化你的调度需求,使他们可以与cron一起工作,即每30分钟运行一次你的工作,或者几乎完全放弃时间驱动调度的概念,并调查一个事件驱动的调度器。

使用事件驱动的计划程序,一个批次的完成是自动启动下一个批次的触发器,可以select没有延迟,也不会冒用基于时间的计划程序的风险,即在上一批完成之前批量启动。

维基百科提供了Job Scheduler软件或工作负载自动化的完整列表,因为许多供应商喜欢调用他们的产品。

运行命令

 crontab -e 

然后,input

 2 

如果它要求您使用默认编辑器然后,input

 */23 * * * * <command here> 

每23分钟运行一次工作。 用任何你想要的号码replace23。