1

因此,如果我有一项计划每 5 分钟运行一次的作业,而运行一次恰好需要 4 分钟,我希望它仍然等待 5 分钟直到下一次开始,而不是只等待 1 分钟. 有什么办法可以用 rufus-scheduler 做到这一点?

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

4

1 回答 1

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-chang-the-next_time-in-flight

于 2014-02-22T00:38:41.573 回答