加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

如何限制同一个Ruby脚本的并发实例?

发布时间:2020-12-16 21:37:31 所属栏目:百科 来源:网络整理
导读:在 Ruby 1.9.x中,什么可能是一个简单的方法,不允许我的Ruby脚本再次运行,还是等待上一个实例完成? 我希望避免乱码文件锁定或进程表检查. 有核心的global mutex还是信号量呢? 我研究了本机Mutex,但这似乎只适用于一个Ruby进程中的线程,而不是跨不同的进程.
在 Ruby 1.9.x中,什么可能是一个简单的方法,不允许我的Ruby脚本再次运行,还是等待上一个实例完成?

我希望避免乱码文件锁定或进程表检查.

有核心的global mutex还是信号量呢?
我研究了本机Mutex,但这似乎只适用于一个Ruby进程中的线程,而不是跨不同的进程.

**以后,我可能会添加超时功能,或限制N个实例,或者看起来使用多个全局锁(每个系统范围的资源只能有一个实例).

解决方法

这个非常短的代码将冻结到位,直到您的脚本中命名的/ tmp中的锁定文件被专门锁定:
File.open("/tmp/#{File.basename $0}.lock",File::RDWR|File::CREAT,0644).flock(File::LOCK_EX)

任何其他程序锁定它,Ruby或不需要,只需要终止或被杀死,以便较新的进程实例解除阻塞并继续.所以现在这个解决办法做我所需要的.我可以调用我的Ruby程序

timeout 1m ./myrubyscript.rb

例如,如果我不耐烦,从包装bash脚本. (在这个例子中,myrubyscript.rb将在1分钟后终止,不管是否得到其文件锁,以继续执行它要写的内容.)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读