2014-02-21 58 views
1

因此,如果我有一項計劃每5分鐘運行一次的工作,而運行一次的時間恰好需要4分鐘,我希望它仍然等待5分鐘,直到下一次啓動,而不是僅等待1分鐘。任何方式與rufus調度程序做到這一點?rufus-scheduler有沒有辦法每5分鐘安排一次工作,從上次工作結束時開始?

看起來這並不是直接支持,儘管我也許可以在作業結束時安排作業本身。我唯一遇到的問題是自舉問題。 (所以如果答案第1部分是否定的,那麼有沒有用魯弗斯調度內置的方式來處理引導的情況下?

回答

1

魯弗斯調度支持「間隔」的工作。

他們描述自述: 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

+1

謝謝 - 間隔的工作是什麼,我一直在尋找 - 我莫名其妙地結束閱讀RubyForge的文件,沒有提及的間隔工作(並出現顯著過時的),而不是GitHub的自述。 MD - 謝謝你爲我找到了。 –

+0

我必須重寫那個舊文檔。感謝指出這個問題。 – jmettraux