【问题标题】:Is there a way with rufus-scheduler to schedule a job every 5 minutes, starting at the completion of the last job run?rufus-scheduler 有没有办法从最后一次作业运行完成开始每 5 分钟安排一次作业?
【发布时间】:2014-02-21 22:16:10
【问题描述】:

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

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

【问题讨论】:

    标签: ruby rufus-scheduler


    【解决方案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

    【讨论】:

    • 谢谢 -- 间隔作业是我一直在寻找的 -- 我不知何故最终阅读了 ruby​​forge 文档,其中没有提到间隔作业(并且显得明显过时)而不是 github README。 md -- 谢谢你帮我找到了。
    • 我将不得不覆盖那个旧文档。感谢您指出这个问题。
    猜你喜欢
    • 2012-02-24
    • 2013-11-27
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2011-12-22
    • 1970-01-01
    • 1970-01-01
    • 2013-04-12
    相关资源
    最近更新 更多