我不能准确地找到如何将我的循环规则设置为每2小时启动一次作业。目前,我的工作是每天凌晨3点(我想)在我的Sidekiq worker类中使用类似以下内容:
recurrence do
daily.hour_of_day(3)
end让它每2小时或每小时运行一次的最好方法是什么?我相信,这使用了引擎盖下的icecube宝石。
发布于 2014-01-06 01:57:16
你试过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的另一种选择是在结束perform方法之前添加self.perform_in(2.hours)。
def perform
# ...
self.class.perform_in(2.hours)
end更新:
https://github.com/tobiassvn/sidetiq/wiki/Known-Issues
不幸的是,使用ice_cube的interval方法在启动(它往往会在相当长的一段时间内占用100%的CPU )和每次循环运行时都非常慢。这是因为它会计算自计划的开始时间以来的所有可能发生的情况。
因此,最好使用更显式的方式
recurrence { hourly.minute_of_hour(0, 15, 30, 45) }发布于 2015-03-15 23:25:46
hourly(2)即使在Ruby 2.0.0和更高版本中也是不好的主意吗?
Sidetiq维基说-
当
运行在Ruby1.9.3.然而,在Ruby 2.0.0+下这不是一个问题。
如果我在这里误解了什么,很抱歉,我们确实使用每小时作为递归,但是在Ruby 2.0.0和更高版本中,在本地或服务器上没有注意到这个问题。但是我会彻底检查的。如果有更多细节,aledalgrande和Pablo会有所帮助。
https://stackoverflow.com/questions/20936305
复制相似问题