我需要每小时或每 30 分钟运行几个脚本,而且我还需要控制它们(重启、停止和启动)。我目前正在使用 cron.js,但是如果我使用 native setInterval,性能会有什么不同吗?而不是使用 cron.js?另外,我能否控制它们?
小脚本可以同时运行数百个,它们修改 mongodb 数据库上的数据。
最佳答案
我强烈建议您使用操作系统的 native crontab(1)
程序。我曾经被 cron.js
的简单所吸引,只是很快意识到它在生产中不是很可靠。
is there any performance difference if I use the native setInterval?
的确如此。由于 Javascript 运行时的性质,setInterval()
不准确,最终会与操作系统的时钟不同步。 cron.js
在幕后使用 setInterval()
,但是,他们添加了一个心跳监视器来调整间隔和使用 Date 对象找到的 cpu 时钟之间的增量。如果脚本运行的准确性至关重要,那么这两种方法都不应被视为可靠。
此外,使用 cron.js
可以让您的定时脚本依赖于进程。当然,您可以使用 forever
无限期地保持进程,但如果它在作业执行前几秒钟崩溃,脚本很可能不会作为 运行>forever
重新启动。更不用说,如果机器重新启动,forever
进程将终止,除非计划使用 upstart(1)
启动时重新启动,或者具有讽刺意味的是,crontab(1 )
。
总结:
crontab(1)
是几十年来企业软件依赖的久经考验的程序。重新发明轮子没有意义 =)
如果像这样在每个脚本的顶部附加一个 SheBang:
#! /usr/bin/env node
并将文件设置为可执行文件,您可以像任何旧 Bash 脚本一样使用 crontab(1)
注册脚本。
关于javascript - node.js - cron.js 与 setInterval,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21783506/