NodeJS 信号量模块:它是如何工作的?

NodeJS Semaphore module: how does it work?

所以我在这里使用 CRON 调用 nodeJS 应用程序。目前无法保证我的脚本不会在给定时刻被 运行ned 多次;我希望脚本在已经 运行ning 时结束。

Semaphores are the usual way to do it. As I'm fairly new to NodeJS,如果可能的话,我想研究并实现一个现有的模块。

所以我找到了 semaphore for node,貌似是最流行的 node.js 预制解决方案。但是文档极其稀少,看代码很头疼:

https://github.com/abrkn/semaphore.js/blob/master/lib/semaphore.js

我以为该模块会使用某种文件来了解进程是否已经 运行ning,但它使用 global 来存储该信息。那个怎么样?这肯定会阻止在单个 CRON 调用中同时对 运行 执行两个子脚本,但这不会阻止对 CRON 的两个不同调用执行,对吗?

或者 global 是否可以在所有 运行ning NodeJS 任务之间共享?

编辑:

我必须明确一点,这个应用程序不是一个 HTTP 应用程序,它只是一个 CRONed 脚本的集合。所以也许信号量模块甚至不是正确的方向,因为它显然应该与 createServer().

一起使用

您可以使用 flock 命令,锁定对资源的同时访问,例如:

* * * * * /usr/bin/flock -w 0 /path/to/cron.lock /usr/bin/node /path/to/script.js

flock 启动时,它会锁定您在命令中指定的锁定文件。因此,flock 是一种通过使用额外的命令行工具来防止 cronjobs 重叠的好方法。

在您的手册页或 http://man7.org/linux/man-pages/man2/flock.2.html

上有很好的解释