在
Ruby 1.9.x中,什么可能是一个简单的方法,不允许我的Ruby脚本再次运行,还是等待上一个实例完成?
我希望避免乱码文件锁定或进程表检查.
有核心的global mutex还是信号量呢?
我研究了本机Mutex,但这似乎只适用于一个Ruby进程中的线程,而不是跨不同的进程.
解决方法
这个非常短的代码将冻结到位,直到您的脚本中命名的/ 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分钟后终止,不管是否得到其文件锁,以继续执行它要写的内容.)