NodeJS Semaphore模块:它是如何工作的

NodeJS Semaphore module: how does it work?

本文关键字:工作 何工作 模块 Semaphore NodeJS      更新时间:2023-12-19

因此,我对nodeJS应用程序进行了CRON调用。目前无法保证我的脚本不会在某个特定时刻运行多次;只要脚本已经在运行,我就希望它结束。

信号量是通常的方法。由于我对NodeJS还很陌生,如果可能的话,我想研究并实现一个现有的模块。

所以我找到了node的信号量,这似乎是最流行的node预制解决方案。然而,文档非常稀疏,研究代码让我头疼:

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

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

或者global可能在所有正在运行的NodeJS任务之间共享?

编辑:

我必须准确地说,这个应用程序不是HTTP应用程序,它只是CRONed脚本的集合。因此,信号量模块可能甚至不是正确的方向,因为它显然应该与createServer()一起使用。

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

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

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

有一个很好的解释:你的手册页或http://man7.org/linux/man-pages/man2/flock.2.html