4

我们在无限循环中编写了一个计划作业,睡眠时间为 120 秒。计划任务是在网站上 ping 以获取少量数据。与我们的解决方案相比,使用 cron 作业有哪些优点/缺点?

4

3 回答 3

4

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

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

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

  • Cron 已经构建,并且可以运行,非常可靠
  • 提供环境和日志输出需要小心
  • 子程序必须每 120 秒重新启动一次
  • Cron 不检查其他程序/服务器/依赖项
  • Cron 不发出信号/启动下游依赖项
  • Cron 不提供严格的调度约束(既不是亚秒级,也不是近实时)
于 2013-10-16T02:05:50.513 回答
3

工作优势cron

  • 您更容易控制它何时运行。您可以控制它将执行的分钟、小时、天等
  • 编写代码和管理其操作更容易。它消除了任务中的循环和定时逻辑,您可以运行crontab以更改定时或将其关闭。
  • 它不运行时不会占用系统中的内存。
  • 如果由于某种原因失败并退出,它将在适当的时候重新启动

无限循环的优点:

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

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

于 2013-10-16T01:57:48.853 回答
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 ? * *”,那么表达式的描述给出的是“从 00 秒开始,每 45 秒,每分钟,每 7 小时,从每天早上 00 点开始”。

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

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

这意味着每次你溢出一个更大的/时间容器/你都会有心律失常。只是让你知道;-)

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

于 2019-03-06T12:59:35.570 回答