如何删除 Sidekiq 的定时任务?

5
我可以帮助您翻译以下内容,这是与IT技术相关的问题:

我遇到了一个问题,不知道如何删除Sidekiq预定任务。

我尝试了很多方法,但都没有成功。

以下是我的代码:

class UpdatePopularityWorker
  include Sidekiq::Worker
  sidekiq_options queue: 'es_sync'

  def perform(city_id=nil)
    clear_popularity_jobs(city_id) 
    time = ENV['UPDATE_POPULARITY'].present? ? ENV['UPDATE_POPULARITY'].to_i : 60.minutes
    UpdatePopularityWorker.perform_in(time, city_id)
  end

  private

  def clear_popularity_jobs(city_id) 
    queued_jobs = Sidekiq::ScheduledSet.new("es_sync")
    jobs = queued_jobs.select{|retri| 
      retri.args == 'UpdatePopularityWorker' 
    }
    jobs.each(&:delete)
  end
end

但是执行后,我得到以下错误:-
{"context":"Job raised exception","job":{"class":"UpdatePopularityWorker","args":[],"retry":true,"queue":"es_sync","jid":"db75d1e92933dfad69449dfa","created_at":1568050410.422802,"enqueued_at":1568050410.423174,"error_message":"wrong number of arguments (given 1, expected 0)"

当我尝试在控制台中执行时,也会因为错误的参数而出现错误:

Sidekiq::ScheduledSet.new("es_sync")
ArgumentError: wrong number of arguments (given 1, expected 0)

请有人提供建议或帮助我解决这个问题。谢谢!:)
4个回答

9

您只需要找到预定任务,并根据与您的代码库匹配的任何条件删除它。

queue = Sidekiq::ScheduledSet.new
queue.each do |job|
  job.delete if (job.klass == 'Notification' && job.args.first == id)
end

4
错误描述了问题:
ArgumentError: wrong number of arguments (given 1, expected 0)

你希望:

Sidekiq::ScheduledSet.new

但是我需要根据特定的队列获取工作。这是否可能? - code_aks
因为我的日程队列太大。 - code_aks
一个队列保存着那些准备立即执行的作业。任何被预定的作业都会被保存在ScheduledSet中,直到它们可以被加入队列。你的作业目前还未进入队列。 - Mike Perham
2
正如API页面所明确的那样,使用API进行作业的扫描和删除非常缓慢。这不是正确的方法。要么使用取消操作,要么使用动态定时作业立即启动工作 - 如果可能不运行,则不要安排它。 - Mike Perham

3
def delete_scheduled_jobs
    Sidekiq::ScheduledSet.new.each do |job|
      job.delete if job.queue.to_sym == :job_name_queue
    end
end

3
Please add some explaination - Sabito stands with Ukraine

3

只需按照以下步骤进行:

ss = Sidekiq::ScheduledSet.new
jobs = ss.scan("SomeWorker").select {|retri| retri.klass == 'SomeWorker' }
jobs = ss.select {|retri| retri.klass == 'SomeWorker' }
jobs.each(&:delete)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接