我无法完全找到如何设置我的重复规则以每 2 小时启动一次作业。目前我的工作是每天凌晨 3 点(我认为)在我的 Sidekiq 工人班中使用类似这样的东西:
recurrence do
daily.hour_of_day(3)
end
每 2 小时或每小时运行一次的最佳方法是什么?我相信这使用了icecube
引擎盖下的宝石。
我无法完全找到如何设置我的重复规则以每 2 小时启动一次作业。目前我的工作是每天凌晨 3 点(我认为)在我的 Sidekiq 工人班中使用类似这样的东西:
recurrence do
daily.hour_of_day(3)
end
每 2 小时或每小时运行一次的最佳方法是什么?我相信这使用了icecube
引擎盖下的宝石。
你试过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 的 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) }
即使使用 Ruby 2.0.0 及更高版本,hourly(2) 也是个坏主意?
Sidetiq wiki 说 -
“当 Sidetiq 在 Ruby 1.9.3 下运行时,已经报告了潜在内存。但是,在 Ruby 2.0.0+ 下,这不是问题。”
抱歉,如果我在这里误解了任何内容,但我们确实使用每小时作为重复,但使用 Ruby 2.0.0 及更高版本,在本地或服务器上没有注意到这个问题。但生病彻底检查。任何更多细节 aledalgrande 和 Pablo 都会有所帮助。