当前位置:  开发笔记 > 编程语言 > 正文

我如何确保一次只运行一个Ruby脚本实例?

如何解决《我如何确保一次只运行一个Ruby脚本实例?》经验,为你挑选了1个好方法。

我有一个每五分钟就在cron上运行一个进程.通常,运行只需几秒钟,但有时需要几分钟.我想确保一次只运行一个版本.

我试了一个明显的方法......

File.open("/tmp/indexer_lock.tmp",'w') do |f|
  exit unless f.flock(File::LOCK_EX)
end

...但它没有测试它是否可以获得锁定,它会在锁定被释放之前阻塞.

知道我错过了什么吗?我宁愿不使用ps来破解某些东西,但这是另一种选择.



1> smathy..:

我知道这是旧的,但对于任何有兴趣的人,都有一个非阻塞常量可以传递给flock,以便它返回而不是阻塞.

File.new("/tmp/foo.lock").flock( File::LOCK_NB | File::LOCK_EX )

更新slhck

flock如果进程收到锁定,则返回true ,否则返回false.因此,要确保一次只运行一个进程,您只想尝试获取锁定,如果无法执行则退出.它就像放在exit unless我上面的代码行前面一样简单:

exit unless File.new("/tmp/foo.lock").flock( File::LOCK_NB | File::LOCK_EX )

推荐阅读
360691894_8a5c48
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有