我需要每小时或每30分钟运行几个脚本,我还需要控制它们(重启,停止和启动)。我目前正在使用cron.js,但是如果我使用本机setInterval会有任何性能差异吗?而不是使用cron.js?另外,我能控制它们吗?
小脚本可能同时运行数百个,它们修改mongodb数据库上的数据。
答案 0 :(得分:8)
我强烈建议您使用操作系统的原生crontab(1)
程序。我曾经被简化为cron.js
,只是为了很快意识到它在制作中不太可靠。
确实是的。由于Javascript运行时的性质,如果我使用原生的setInterval会有任何性能差异吗?
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脚本一样。