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

时间:2016-04-04 11:51:22

标签: javascript node.js cron semaphore

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

Semaphores是通常的做法。由于我对NodeJS还不熟悉,如果可能的话,我想研究和实现现有的模块。

所以我发现semaphore for node,似乎是节点最受欢迎的预制解决方案。然而,文档非常稀少,研究代码让我很头疼:

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

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

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

修改

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

1 个答案:

答案 0 :(得分:2)

您可以使用* * * * * /usr/bin/flock -w 0 /path/to/cron.lock /usr/bin/node /path/to/script.js 命令来锁定对资源的同时访问,例如:

{{1}}

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

有一个很好的解释:您的手册页或file structure