Joe*_*lor 3 ruby rufus-scheduler
我正在使用rufus调度程序来执行一些任务.我希望在脚本启动时,或者在给定的时间间隔内,所有任务都会立即运行.这似乎没有API支持,或者我错过了什么?
我已经使用0.1秒作为延迟,直到第一次运行,如下所示
scheduler = Rufus::Scheduler.new
scheduler.every '10s', :first_in => 0.1 do
#do some work
end
Run Code Online (Sandbox Code Playgroud)
如果该:first_in属性设置为0,则在第一次运行之前,调度程序将等待整整10秒.如果该值设置得太低(我想在过去执行任务时评估的内容),或者如果我使用Time.now,则会引发以下错误:
~/.ruby/gems/rufus-scheduler-3.0.4/lib/rufus/scheduler/jobs.rb:383:in `first_at=': cannot set first[_at|_in] in the past: 1.0e-07 -> 2014-01-22 10:44:32 +0000 (ArgumentError)
from ~/.ruby/gems/rufus-scheduler-3.0.4/lib/rufus/scheduler/jobs.rb:445:in `first_at='
from ~/.ruby/gems/rufus-scheduler-3.0.4/lib/rufus/scheduler/jobs.rb:370:in `initialize'
from ~/.ruby/gems/rufus-scheduler-3.0.4/lib/rufus/scheduler/jobs.rb:457:in `initialize'
from ~/.ruby/gems/rufus-scheduler-3.0.4/lib/rufus/scheduler.rb:570:in `new'
from ~/.ruby/gems/rufus-scheduler-3.0.4/lib/rufus/scheduler.rb:570:in `do_schedule'
from ~/.ruby/gems/rufus-scheduler-3.0.4/lib/rufus/scheduler.rb:207:in `every'
from rufus_runner.rb:11:in `<main>'
Run Code Online (Sandbox Code Playgroud)
知道正确的方法是做什么的吗?
皮埃尔 - 路易斯很接近:
require 'rufus-scheduler'
s = Rufus::Scheduler.new
p [ :scheduled_at, Time.now ]
s.every '5s', :first_in => 0.4 do
p [ :every, Time.now ]
end
s.join
Run Code Online (Sandbox Code Playgroud)
默认情况下,Rufus调度程序每秒唤醒三次,因此0.4是一个很好的近似值.
这会发出:
[:scheduled_at, Wed Jan 22 20:30:55 +0900 2014]
[:every, Wed Jan 22 20:30:56 +0900 2014]
[:every, Wed Jan 22 20:31:01 +0900 2014]
[:every, Wed Jan 22 20:31:06 +0900 2014]
[:every, Wed Jan 22 20:31:11 +0900 2014]
...
Run Code Online (Sandbox Code Playgroud)