NodeJS Semaphore模块:它是如何工作的
NodeJS Semaphore module: how does it work?
因此,我对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
相关文章:
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- 最大高度转换不;不工作,工作缓慢
- Gulp-rev:不是第一次工作,而是在第一次工作之后工作
- 在JavaScript中的类中,push和concat的工作方式有何不同
- JQuery - Ajax: encodeUriComponent不工作(EncodeUri工作)