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 |
に書いてあることを利用すればもっと柔軟なことができそうなのだが・・・・