如何删除Sidekiq Enterprise定期作业?

时间:2016-04-26 22:00:32

标签: ruby-on-rails ruby sidekiq

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数据库显示Sidekiq为每个循环创建了一个loop-uniqueid密钥,以及一个loop-history-uniqueid密钥和loops-uniqueid密钥。我应该销毁所有这些钥匙吗?是否最好销毁所有这些密钥,然后重新注册所有当前的工作?

2 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

只需运行:

Sidekiq::Cron::Job.destroy_all!

sidekiq-cron docs

中所述