node.js - cron.js vs setInterval

时间:2014-02-14 15:41:24

标签: javascript node.js npm

我需要每小时或每30分钟运行几个脚本,我还需要控制它们(重启,停止和启动)。我目前正在使用cron.js,但是如果我使用本机setInterval会有任何性能差异吗?而不是使用cron.js?另外,我能控制它们吗?

小脚本可能同时运行数百个,它们修改mongodb数据库上的数据。

1 个答案:

答案 0 :(得分:8)

我强烈建议您使用操作系统的原生crontab(1)程序。我曾经被简化为cron.js,只是为了很快意识到它在制作中不太可靠。

  

如果我使用原生的setInterval会有任何性能差异吗?

确实是的。由于Javascript运行时的性质,setInterval()不准确,最终会与操作系统的时钟不同步。 cron.js使用setInterval(),但是,他们添加了一个心跳监视器来调整间隔和使用Date对象找到的cpu时钟之间的增量。如果脚本运行的准确性至关重要,那么这两种方法都不应该被认为是可靠的。

此外,使用cron.js会使您的定时脚本依赖于该过程。当然,您可以使用forever无限期地保持进程,但如果它在作业执行前几秒发生崩溃,则脚本很可能无法以forever运行重新启动。更不用说,如果机器重新启动,forever进程将会死亡,除非计划在upstart(1)启动时重启,或者具有讽刺意味的是crontab(1)

要点:

crontab(1)是企业软件依赖数十年的战斗测试程序。重新发明轮子没有意义=)

如果你在每个脚本的顶部追加一个SheBang,如下:

#! /usr/bin/env node

并将文件设置为可执行文件,您可以使用crontab(1)注册脚本,就像任何旧的Bash脚本一样。