2014-02-21 3 views
1

Итак, если у меня есть работа, которая должна запускаться каждые 5 минут, и один раз во время ее запуска происходит 4 минуты, я бы хотел, чтобы она продолжала ждать 5 минут, пока она не начнется в следующий раз, а не только в ожидании 1 минута. Любой способ сделать это с помощью rufus-scheduler?Есть ли способ с rufus-планировщиком планировать работу каждые 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, которая не упоминает задания интервалов (и, кажется значительно устарел) вместо README GitHub. md - спасибо, что нашел это для меня. –

+0

Мне придется переопределить этот старый документ. Спасибо, что указал на эту проблему. – jmettraux