我无法确切地找到如何设置我的重复规则以每2小时启动一次作业。目前我的工作是每天凌晨3点(我认为)在我的Sidekiq工人阶级使用类似的东西:
recurrence do
daily.hour_of_day(3)
end
每2小时或每小时运行一次的最佳方法是什么?我相信这会使用引擎盖下的icecube
宝石。
答案 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会有所帮助。