Sidekiq + Sidetiq每2小时复发一次?

时间:2014-01-05 16:52:34

标签: ruby-on-rails ruby sidekiq sidetiq

我无法确切地找到如何设置我的重复规则以每2小时启动一次作业。目前我的工作是每天凌晨3点(我认为)在我的Sidekiq工人阶级使用类似的东西:

recurrence do
  daily.hour_of_day(3)
end

每2小时或每小时运行一次的最佳方法是什么?我相信这会使用引擎盖下的icecube宝石。

2 个答案:

答案 0 :(得分:19)

您是否尝试过hourly(2)

recurrence do
  hourly(2)
  # if you want to specify the exactly minute or minutes
  # `minute_of_hour(30, ...)`
  # hourly(2).minute_of_hour(30)
end

它位于icecube's README,但我还没有尝试过。

您也可以这样做:

recurrence do
  # set recurrence to [0, 2, 4, 6, 8, 10, 12, 14, 16, 18, 20, 22]
  daily.hour_of_day(*(0..23).to_a.select { |hour_of_day| hour_of_day.even? })
end

但恕我直言hourly(2)是更好的选择。

没有Sidetiq的另一个选择是在结束self.perform_in(2.hours)方法之前添加perform

def perform
   # ...
   self.class.perform_in(2.hours)
end

更新

https://github.com/tobiassvn/sidetiq/wiki/Known-Issues

  
    

不幸的是,使用ice_cube的间隔方法在启动时非常慢(它会在相当长的一段时间内耗尽100%的CPU)以及每次重复运行。这是因为它计算了自计划开始时间以来每次可能发生的事件。

  

因此,最好使用更明确的方式

recurrence { hourly.minute_of_hour(0, 15, 30, 45) }

答案 1 :(得分:2)

每小时(2)即使使用Ruby 2.0.0及以上版本也是个坏主意?

Sidetiq维基说 -

  

“当Sidetiq运行时,已经报告了潜在的记忆   Ruby 1.9.3。但是,在Ruby 2.0.0+下,这不是问题。“

很抱歉,如果我误解了这里的任何内容,但我们确实每小时使用一次,但是使用Ruby 2.0.0及更高版本,在本地或服务器上没有注意到这个问题。但是要彻底检查它。更多细节aledalgrande和Pablo会有所帮助。