Rufus调度程序在预定时间(预期)触发,并在上一次运行完成后再次触发

时间:2017-11-22 21:50:55

标签: ruby-on-rails ruby ruby-on-rails-4 scheduling rufus-scheduler

我已经安排rufus cron运行一个方法(一种在远程数据库中发布复杂查询的方法,检索结果并进行一些处理)每小时99%的时间方法完成执行< 1小时。

Rufus在每个预期的时间点燃方法都很好,但问题是有时(1%时间)方法不会在一小时内完成;调度程序在预期时间触发第二个,并在上一次运行完成后再次触发第二个。

例如,

pin_sampling_job_scheduler = Rufus::Scheduler.new pin_sampling_job_scheduler.cron("22 * * * *") do puts "sampling starts" DatafetchRedshift.pin_sampling_job end

对于小时= 00,该方法在第22分钟开始(正如预期的那样并且假设作业运行1.5小时)对于小时= 01,方法在第22分钟开始并且在第52分钟再次开始(第一次运行完成后) 。为什么会这样?任何帮助或建议将不胜感激。

Rufus版本-3.3.4 Rails - 4.1.6 Ruby 2.2.0

P.S - 我无法将调度程序运行更改为超过一个小时,因为它完成了99%

1 个答案:

答案 0 :(得分:1)

https://github.com/jmettraux/rufus-scheduler#overlap--false

pin_sampling_job_scheduler = Rufus::Scheduler.new

pin_sampling_job_scheduler.cron("22 * * * *", overlap: false) do
  ts = Time.now.strftime('%Y%m%d%H%M')
  puts "#{Time.now} - sampling #{ts} starts..."
  DatafetchRedshift.pin_sampling_job
  puts "#{Time.now} - sampling #{ts} stopped."
end
  

对于小时= 00,该方法在第22分钟开始(正如预期的那样并且假设作业运行1.5小时)对于小时= 01,方法在第22分钟开始并且在第52分钟再次开始(第一次运行完成后) 。为什么会这样发生?

您可以https://github.com/jmettraux/rufus-scheduler/issues报告问题(请在提交问题前阅读https://github.com/jmettraux/rufus-scheduler#getting-help