【问题标题】:Sidekiq + Sidetiq recurrence every 2 hours?Sidekiq + Sidetiq 每 2 小时重复一次?
【发布时间】:2014-01-05 16:52:34
【问题描述】:

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

recurrence do
  daily.hour_of_day(3)
end

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

【问题讨论】:

    标签: ruby-on-rails ruby sidekiq sidetiq


    【解决方案1】:

    你试过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 的间隔方法在启动时非常慢(它往往会在很长一段时间内消耗 100% 的 CPU)和每次重复运行。这是因为它会计算自计划开始时间以来的所有可能事件。

    所以,最好使用更明确的方式

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

    【讨论】:

    • hourly(2) 非常糟糕,请参阅 Sidetiq wiki 了解已知问题 - 它会使 CPU 达到 100%
    【解决方案2】:

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

    Sidetiq wiki 说 -

    "Sidetiq 运行时已报告潜在内存 红宝石 1.9.3 。但是,在 Ruby 2.0.0+ 下,这不是问题。”

    对不起,如果我在这里误解了任何内容,但我们确实使用每小时作为重复,但使用 Ruby 2.0.0 及更高版本,在本地或服务器上没有注意到这个问题。但生病彻底检查。任何更多细节 aledalgrande 和 Pablo 都会有所帮助。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-01-20
    • 2016-06-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    相关资源
    最近更新 更多