18
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Sidekiq周り

Last updated at Posted at 2020-04-16

Sidekiqのジョブには以下のステータスがある

  • 処理待ち
  • 実行中
  • リトライ待ち
  • 実行予約(その時間まで実行されない)
    ※一度失敗すると「リトライ待ち」になり、処理待ちには出てこない

「実行中」のジョブは削除できないという縛りあり。

それぞれの数、一覧、削除をするサンプル(rails consoleで実行)

処理待ち

やりたいこと コード
数表示 Sidekiq::Queue.new.size
一覧表示 Sidekiq::Queue.new.each {|job|puts "#{job.jid} #{job.klass} #{job.args}"}
削除 Sidekiq::Queue.new.clear ※全削除

実行中

やりたいこと コード
数表示 Sidekiq::Workers.new.size
一覧表示 Sidekiq::Workers.new.each {|process_id, thread_id, job| puts "process_id:#{process_id}, thread_id:#{thread_id}, job:#{job}"}
削除 ※実行中は削除不可 もしsidekiq停止させていい&全redisのデータ飛ばしていいなら以下の方法
1. sidekiqプロセスキル
2. redis-cliを起動(redis-cliコマンド)して以下を順に実行
3. KEYS *
4. flushall
5. KEYS *
6. sidekiqプロセス復活

リトライ待ち

やりたいこと コード
数表示 Sidekiq::RetrySet.new.size
一覧表示 Sidekiq::RetrySet.new.each {|job|puts "#{job.jid} #{job.klass} #{job.args}"}
削除 Sidekiq::RetrySet.new.clear

実行予約

やりたいこと コード
数表示 Sidekiq::ScheduledSet.new.size
一覧表示 Sidekiq::ScheduledSet.new.each {|job|puts "#{job.jid} #{job.klass} #{job.args} #{job.created_at} #{job.at}"}
削除 全削除
Sidekiq::ScheduledSet.new.clear
特定のジョブを削除
1. 一覧表示して削除したいジョブのJID(=先頭の文字列)を確認する
Sidekiq::ScheduledSet.new.each {|job|puts "#{job.jid} #{job.klass} #{job.args} #{job.created_at} #{job.at}"}
2. に上記で特定したJIDをセットして実行
Sidekiq::ScheduledSet.new.find_job('<JID>').try(:delete)
=>-1

に書いてあることを利用すればもっと柔軟なことができそうなのだが・・・・

18
9
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
9

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?