사이드 키크 대기열 지우기


93

나는 영원히 달리는 일꾼이다.

class Worker
  include Sidekiq::Worker
  sidekiq_options queue: "infinity", retry: true

  def perform(params)
    # ...
    self.class.perform_in(30.seconds, params)
  end
end

문제는 이렇게 시작할 때 작업자를로드한다는 것입니다. config/initializers/load_workers.rb

Rails.application.config.after_initialize do  
  if ENV["SIDEKIQ"] == "1"
    Worker.perform_async({})
  end
end

이것을 사용하여 sidekiq을 시작합니다 SIDEKIQ=1 sidekiq --verbose --environment production -C config/sidekiq.yml.

즉, 현재 실행중인 작업자뿐 아니라 일정이 조정되는 작업자도 중지해야합니다.

시작할 때 (신작을로드하기 직전에) 실행 해 보았지만 작동하지 않았습니다.

q = []
q += Sidekiq::RetrySet.new.select { |job| job.klass.match(/Worker/) }
q += Sidekiq::Queue.new("infinity").select { |job| job.klass.match(/Worker/) }
q += Sidekiq::ScheduledSet.new.select { |job| job.klass.match(/Worker/) }
q.each(&:delete)

5-ish 배포 후에는 나중에 예약 된 대기열에 많은 중복 작업자가 있습니다. 그렇다면 하나의 대기열에서 모든 항목을 지우고 이미 실행중인 작업이 다시 예약되지 않도록하는 방법이 있습니까?

sidekiq 3.0을 사용하고 있습니다.


큐 또는 예약 된 작업을 삭제 하시겠습니까? 또는 중복 예약 된 작업을 말하는 것이 좋습니다.
Sabyasachi Ghosh 2014

새 작업자를로드하기 전에 작업의 모든 추적을 삭제하고 싶습니다.
Linus Oleander

ok got your problem .. 예약 된 모든 작업을 삭제하려는 것을 의미합니다.
Sabyasachi Ghosh

@haSabyasachiGhosh 아니요, 예약 된 작업뿐만 아니라 대기열과 관련된 모든 항목을 삭제하고 싶습니다. 다시 말해; 실패, 진행 중, 대기 중 및 예약 된 작업은 삭제해야합니다.
Linus Oleander

모든 도움말은 여기에 있습니다 -github.com/mperham/sidekiq/wiki/API
viks

답변:


161

대기열을 제거하여 대기열의 모든 작업을 삭제합니다.

require 'sidekiq/api' # for the case of rails console

Sidekiq::Queue.new("infinity").clear
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear

될 수 Sidekiq Pro는 당신을 도울 것입니다.
Ranjithkumar Ravi

5
여기에 카운터를 취소하는 것입니다 Sidekiq::Stats.new.reset이 밖으로 도움이 내가 알을

14
기본 / 첫 번째 대기열을 지우려면 :Sidekiq::Queue.all.first.clear
user456584

1
Sidekiq :: Queue.new ( "reports"). clear 및 Sidekiq :: Queue.new ( "alerts"). clear는 현재 대기열을 지우는 데 도움이됩니다. 하지만 Busy는 어떻습니까? "바쁨"작업을 지우려면 어떻게합니까?
Donato

31
그들 모두를 취소Sidekiq::Queue.all.each &:clear
마르코 Lazzeri

95

이것은 나를 위해 트릭을했습니다.

Sidekiq::Queue.all.each(&:clear)
Sidekiq::RetrySet.new.clear
Sidekiq::ScheduledSet.new.clear
Sidekiq::DeadSet.new.clear

1
감사합니다 이것은 내가 긴급 하하에 있었던 매력처럼 작동했습니다, 조수는 대기열에 너무 많은 작업자와 함께 있었는데 이것은 내가 kill명령처럼 찾고 있었기 때문에 기대했던대로 작동했습니다
d1jhoni1b

완벽합니다. 내 환경에 추가하면 require 'sidekiq/api'콘솔에서 작업해야했습니다.
bonafernando

19

대부분의 sidekiq 버전에서 나를 위해 작동합니다.

Sidekiq::RetrySet.new.clear

Sidekiq::ScheduledSet.new.clear

통계 지우기 (선택 사항)

Sidekiq::Stats.new.reset

이것은 큐뿐만 아니라 전체 데이터베이스를 플러시합니다.
Linus Oleander

sidekiq의 모든 데이터베이스를 플러시하고 rails 콘솔에서 잘 작동합니다
vidur punj

-2

기본 제공 메서드가 있지만이 코드를 실행하여 큐를 지울 수 있습니다.

queue = Sidekiq::Queue.new
queue.each do |job|
  job.delete 
end

음, 대기열에서 모든 작업을 가져온 다음 하나씩 삭제하면 작동합니다.
Asad Hameed

아니에요. 기존 답변을 살펴보십시오. 또한 기존 답변의 중복입니다.
Linus Oleander

무슨 말을 하시는지 모르겠습니다. 제가 게시 한 것과 동일한 답변을 보여 주시겠습니까?
Asad Hameed
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.