How to cancel a scheduled job in sidekiq. How to fetch jid of a scheduled job from my code?

Viewed 125

job = HardWorker.perform_in(2.minutes, arg1, arg2)

j_id = Sidekiq::ScheduledSet.new.find { |job_id| job.job_id }.item["jid"]

I get the following error : NoMethodError: undefined method `job_id' for "6512497a4359600501f63038":String

What is the correct way to fetch job id and delete the scheduled job?

1 Answers

From Sidekiq wiki FAQ

How do I cancel a Sidekiq job?

Sidekiq does not provide this functionality; it's safer and better for the application to do it. You should implement something like this:

class MyWorker
  include Sidekiq::Worker

  def perform(args)
    return if cancelled?
    # do stuff
  end

  def cancelled?
    Sidekiq.redis {|c| c.exists("cancelled-#{jid}") } # Use c.exists? on Redis >= 4.2.0
  end

  def self.cancel!(jid)
    Sidekiq.redis {|c| c.setex("cancelled-#{jid}", 86400, 1) }
  end
end
Related