how to delete a job in sidekiq

Solution 1:

According to this Sidekiq documentation page to delete a job with a single id you need to iterate the queue and call .delete on it.

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

There is also a plugin called sidekiq-status that provides you the ability to cancel a single job

scheduled_job_id = MyJob.perform_in 3600
Sidekiq::Status.cancel scheduled_job_id #=> true

Solution 2:

The simplest way I found to do this is:

job = Sidekiq::ScheduledSet.new.find_job([job_id])

where [job_id] is the JID that pertains to the report. Followed by:

job.delete

I found no need to iterate through the entire queue as described by other answers here.

Solution 3:

I had the same problem, but the difference is that I needed to cancel a scheduled job, and my solution is:

Sidekiq::ScheduledSet.new.each do |_job|
  next unless [online_jid, offline_jid].include? _job.jid
  status = _job.delete
end

Solution 4:

If you want to cancel a scheduled job, I'm not sure about @KimiGao's answer, but this is what I adapted from Sidekiq's current API documentation:

jid = MyCustomWorker.perform_async

r = Sidekiq::ScheduledSet.new
jobs = r.select{|job| job.jid == jid }
jobs.each(&:delete)

Hope it helps.