我正在运行一个ruby on rails应用程序,它需要每隔一分钟执行一次特定的任务:
scheduler.every '1m' do
.....
end但有时,工作需要超过1分钟才能完成工作。发生的事情是,在他完成之前,Rufus开始了一个新的工作,这在它结束之前就“杀死”了之前的工作。有没有办法让Rufus在开始下一项工作之前完成这项工作?
附言:还在开发中,所以我用的是Webrick
发布于 2016-06-30 02:49:48
您可以为您的任务添加文件锁定检查。有一个让它变得非常简单的宝石:https://github.com/cph/single_file。
基本上,您可以将任务包装在SingleFile块中,第一个任务将锁定临时文件。当它计划再次运行时,如果前一个任务仍然在文件上设置了锁(它还没有完成运行),那么该任务将不会在那个时间运行。
include SingleFile
scheduler.every '1m' do
with_file_lock("/tmp/magic_is_happening.lock") do
MagicClass.poof!
end
end发布于 2016-06-30 05:27:48
Christopher Davies以评论的形式做出了非常好的回应。他指出了“间隔”工作。
https://github.com/jmettraux/rufus-scheduler#in-at-every-interval-cron
你可以这样做
scheduler.interval '1m' do
# ...
end为了让rufus-scheduler在每次运行之间间隔1分钟来运行你的块。
如果您深入研究文档,会发现另一种技术:
https://github.com/jmettraux/rufus-scheduler#overlap--false
scheduler.every '1m', overlap: false do
# ...
end调度程序将每分钟检查一次。如果块还没有运行,它将运行它,如果它正在运行,它不会触发,它将在一分钟后返回并再次检查。
选择适合您需求的技术。
https://stackoverflow.com/questions/38105983
复制相似问题