如何删除 Sidekiq Enterprise 定期作业?

How to delete Sidekiq Enterprise periodic jobs?

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

报名后,如何delete/unregister找工作?例如,如果 worker 不再使用并且不应该再 运行 你如何安全地从 Redis 中删除注册的工作?从初始化程序中删除它并重新启动 Sidekiq 不会这样做,并且 API 似乎没有提供删除,而是说 The 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 数据库显示 Sidekiq 为每个循环创建了一个 loop-uniqueid 键,以及一个 loop-history-uniqueid 键和 loops-uniqueid 键。我应该销毁所有这些密钥吗?最好销毁所有这些密钥,然后重新注册所有当前作业吗?

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

无需使用 API 删除定期作业。

就运行这个:

Sidekiq::Cron::Job.destroy_all!

sidekiq-cron docs

所述