在无限循环运行中,cron作业的优缺点是什么?

时间:2013-10-16 01:44:27

标签: ruby cron

我们在120秒睡眠的无限循环中对预定作业进行编码。计划的任务是在网站上ping以获取一小部分数据。使用cron作业比使用我们的解决方案有什么优点/缺点?

3 个答案:

答案 0 :(得分:3)

构建一个轮询远程站点的程序可以提供这些问题/好处,

  • 缺陷(未处理的异常),程序可能会失败,并停止轮询
  • 程序延迟可能导致时间滑动(> 120秒延迟)
  • 关注点分离 - 与程序逻辑混合的轮询调度会产生更多代码(并且失败的可能性更大)
  • DRY - 为什么(重新)构建已存在的cron功能
  • 即使没有使用(1 / 120s)
  • ,程序也必须在内存中

Cron是为定期调度而构建的,这里有一些问题/好处,

  • Cron已经建成并且工作非常可靠
  • 提供环境和记录输出需要小心
  • 必须每120秒重新启动子程序
  • Cron不检查其他程序/服务器/依赖项
  • Cron不发信号/启动下游依赖项
  • Cron不提供严格的调度约束(既不是亚秒级也不是接近实时的)

答案 1 :(得分:2)

cron工作的优点:

  • 您可以更轻松地控制它何时运行。您可以控制它将执行的分钟,小时,日等等
  • 编写代码并管理其操作更容易。它消除了任务中的循环和时序逻辑,并运行crontab来更改时间或关闭它。
  • 当系统未运行时,它不占用系统内存。
  • 如果失败并因某种原因退出,它将在适当的时间到来时再次启动

无限循环的优点:

  • 每次需要时都没有重新启动的开销

我认为在这种特定情况下,CPU实时和内存的优缺点可能很小。但是,由于可以控制执行时间和管理的简便性,我更喜欢cron任务无限期运行的任何工作。

答案 2 :(得分:0)

除了上面的答案外,还有其他一些警告。您很幸运,因为您的计划是120秒,因此您实际上可以在任何已知的cron表达式解析器中指定它(间隔为2分钟)。

如果说125,您将无法在任何方言中指定它。

假设您希望间隔45秒。在某些cron表达式的方言(例如Quartz)中,您可以指定秒。需要注意的是,仍然无法指定45秒间隔。

考虑cron表达式0/13 0/7 * * *(https://crontab.guru/#0/13_0/7_ _ _ *)。

Crontab Guru提供了以下表达式的解释:“从0到59的每13分钟,从0到23的每7小时一次。”

如果您咨询https://www.freeformatter.com/cron-expression-generator-quartz.html(基于Quartz)并考虑表达式“ 0/45 * * / 7?* *”,则给出的表达式说明为“每隔25秒从00秒开始,从每天的凌晨00点开始,每分钟每7小时”。

计算的执行顺序为(从现在开始):

2019年3月6日星期三14:00:00 2019年3月6日星期三14:00:45 2019年3月6日星期三14:01:00 2019年3月6日星期三14:01:45 UTC 2019年3月6日星期三14:02:00 2019年3月6日星期三14:02:45 2019年3月6日星期三14:03:00 2019年3月6日星期三14:03:45 UTC

这意味着每次您溢出一个较大的/时间较长的容器/时,都会出现心律不齐。请注意;-)

PS另外值得注意的是,表达式上的7是多余的。我们每分钟重新开始一次节奏,这也意味着每隔一个小时。 CRON表达式很有趣:-)