【问题标题】:How to delete Sidekiq Enterprise periodic jobs?如何删除 Sidekiq Enterprise 定期作业?
【发布时间】:2016-04-26 22:00:32
【问题描述】:

Sidekiq Enterprise 包括对 Periodic Jobs 的支持,并包括一个使用初始化程序注册作业的示例:

Sidekiq.configure_server do |config|
  config.periodic do |mgr|
    # see any crontab reference for the first argument
    # e.g. http://www.adminschoice.com/crontab-quick-reference
    mgr.register('0 * * * *', SomeHourlyWorkerClass)
    mgr.register('* * * * *', SomeWorkerClass, retry: 2, queue: 'foo')
    mgr.register(cron_expression, worker_class, job_options={})
  end
end

注册工作后,如何删除/取消注册工作?例如,如果工人不再使用并且不应该再运行,你如何安全地从 Redis 中删除已注册的作业?从初始化程序中删除它并重新启动 Sidekiq 并没有这样做,并且 API 似乎没有提供删除功能,而是说 Periodic API 允许您列出已注册的定期作业并查看排队历史

有一个用于删除常规队列中的作业的 API:

queue = Sidekiq::Queue.new("mailer")
queue.each do |job|
  job.klass # => 'MyWorker'
  job.args # => [1, 2, 3]
  job.delete if job.jid == 'abcdef1234567890'
end

但尝试将其调整为定期作业 API:

Sidekiq::Periodic::LoopSet.new.each do |lop|
  lop.delete
end

...引发错误:

NoMethodError: undefined method `delete' for #<Sidekiq::Periodic::Loop:0x007fff0a48dbe8>

Redis db 显示 Sidekiq 为每个循环创建了一个 loop-uniqueid 键,以及一个 loop-history-uniqueid 键和 loops-uniqueid 键。我应该销毁所有这些密钥吗?是否最好销毁所有这些密钥,然后重新注册所有当前作业?

【问题讨论】:

    标签: ruby-on-rails ruby sidekiq


    【解决方案1】:

    Sidekiq Enterprise 领导角色由辅助服务器担任。当担任领导角色时,定期作业被锁定并且无法修改。关闭所有 Sidekiq 服务器,包括领导者,然后重新启动 Sidekiq 以清除并重新注册初始化程序中的所有作业。

    无需使用 API 来删除 Periodic Jobs。

    【讨论】:

    • 很高兴你知道了!
    • 理想情况下应该更新“Ent Periodic Jobs”页面以记录“leader”的这种锁定行为。
    【解决方案2】:

    运行这个:

    Sidekiq::Cron::Job.destroy_all!
    

    sidekiq-cron docs中所述

    【讨论】:

    • 好吧,当我在三年半前发布这个帖子时,我并没有使用 sidekiq-cron。我使用的是 Sidekiq Enterprise,如问题标题和帖子本身所述。
    • 哦,实际上我们也使用 Sidekiq Enterprise,我将这个命令交给了我们的 DevOps,他们报告说他们安装了 gem,运行命令并解决了问题。虽然是的,但可能这不是最好的解决方案。
    猜你喜欢
    • 2021-04-12
    • 1970-01-01
    • 2021-01-21
    • 1970-01-01
    • 1970-01-01
    • 2014-06-02
    • 2015-10-03
    • 2014-09-13
    相关资源
    最近更新 更多