LoginSignup
5

More than 5 years have passed since last update.

SidekiqでQueueが空になってからSidekiq Workerを終了する

Last updated at Posted at 2015-11-18

これは何か?

SidekiqでQueueが空になってからSidekiq Workerを終了する簡単な方法。Sidekiqをdaemon化してinit scriptなどで開始、終了するような場合に使える。

利用例としては、EC2のLocalにRedisを持ってSidekiqを使用するときなどに、タスクが蒸発することを防ぐことができる。

前提知識

  • kill -TERMとは何かを理解している。

やり方

Sidekiqにタスクを投げる側(概ねRails等)を止めてから

$ rails runner 'puts Sidekiq::Queue.new.size'

をすると、Queueに残っているタスク数が帰ってくる。なので、上記が0になってから

$ kill -TERM [Sidekiq PID]

する。TIMEOUTしてkill -9してしまわないようにだけ注意する。

もちろんsidekiqctlを使ってもいい。upstart等であれば、stopの時に投げられるのはTERMなので、pre-stop等で待ってあげると良い。

展望

実行時間が長いタスクをローカルのSidekiqに置いておくと全然シャットダウンされなかったり、Task executerによってはタイムアウトしてkillされちゃうので、別途Redisを立てておいてタスクを転送したりしたほうが良いかもね。

まとめ

ほら、簡単でしょ?

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
5