Rufus Scheduler:立即第一次运行每隔x秒运行一次

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)

知道正确的方法是做什么的吗?

jme*_*aux 6

皮埃尔 - 路易斯很接近:

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)