【发布时间】:2016-07-23 22:43:42
【问题描述】:
所以我在这里使用我对 nodeJS 应用程序的 CRON 调用。目前不能保证我的脚本不会在给定时刻运行多次;我希望脚本在它已经运行时结束。
Semaphores 是常用的方法。由于我对NodeJS 还很陌生,因此如果可能的话,我想为此研究和实现一个现有模块。
于是我找到了semaphore for node,这似乎是最流行的node 预制解决方案。但是文档极其稀少,研究代码让我头疼:
https://github.com/abrkn/semaphore.js/blob/master/lib/semaphore.js
我认为模块会使用某种文件来了解进程是否已经在运行,但是它使用global 来存储该信息。那个怎么样?这肯定会阻止两个子脚本在单个 CRON 调用中同时运行,但这不会阻止对 CRON 的两个不同调用执行,不是吗?
或者global 是否有可能在所有正在运行的 NodeJS 任务之间共享?
编辑:
我必须明确指出,这个应用程序不是 HTTP 应用程序,它只是 CRONed 脚本的集合。所以也许这个信号量模块甚至不是正确的方向,因为它显然应该与createServer()一起使用。
【问题讨论】:
-
我会为此使用普通的旧 pid 文件。
-
在示例中:看起来信号量模块会阻止另一个请求的输入,而在处理一些昂贵的任务时,看起来它不会阻止事件循环。也许在你的情况下你需要另一个模块。
-
你为什么要使用带有节点的 cron 呢?您可以简单地使用setTimeout 并将您的脚本编码为仅依赖于
node.js,它会安排它们的执行。
标签: javascript node.js cron semaphore