有没有办法让rufus-scheduler每隔5分钟安排一份工作,从最后一次工作完成开始?

时间:2014-02-21 22:16:11

标签: ruby rufus-scheduler

因此,如果我的工作计划每5分钟运行一次,而且一次运行时间恰好需要4分钟,我希望它还能等待5分钟,直到下次开始,而不是等待只有1分钟。有没有办法用rufus-scheduler做到这一点?

虽然我可以在运行结束时安排作业本身,但看起来并不直接支持。我唯一的问题是引导问题。 (所以如果第1部分的答案是否定的,那么是否有内置的方法来使用rufus-scheduler来处理引导案例?

1 个答案:

答案 0 :(得分:1)

Rufus-scheduler支持“间隔”作业。

它们在自述文件中描述: https://github.com/jmettraux/rufus-scheduler/#in-at-every-interval-cron

require 'rufus-scheduler'

s = Rufus::Scheduler.new

s.interval('5m') do |job|
  puts "Doing it..."
  sleep(rand * 1000)
  puts "done. See you in #{job.interval}."
end

#s.join

如果那不是你所看到的,请注意,在“每个”工作的情况下,可以修改飞行中的“next_time”,如:

require 'rufus-scheduler'

s = Rufus::Scheduler.new

s.every '5m' do |job|
  t = Time.now
  puts "doing the job..."
  # ...
  if Time.now - t > 4 * 60
    job.next_time = Time.now + 1 * 60
  end
  puts "next_time will be #{job.next_time}."
end

#s.join

这也可以派上用场。

https://github.com/jmettraux/rufus-scheduler#every-jobs-and-changing-the-next_time-in-flight