LoginSignup
95
80

More than 5 years have passed since last update.

sidekiq を安全に止める

Last updated at Posted at 2015-02-08

ワーカーに変更を加えた場合、変更を有効にするためには sidekiq を再起動する必要があります。しかし、sidekiq は一度起動すると働き続けるため、いきなり止めるのは危険です。手順を踏んで再起動しましょう。

1. TSTP で kill

# >= 5.0.0
kill -TSTP [worker_pid]

# < 5.0.0
kill -USR1 [worker_pid]

まず deploy する前に TSTP(v5.0.0 未満は USR1) で kill します。これで sidekiq は新しいプロセスを生成しなくなります。プロセスを見てみると下記のように stopping と書かれ、徐々にスレッド数が減っていくのがわかると思います。0 になると全てのスレッドが処理を完了したことがわかります。
しかし、特に処理の完了は待たずに deploy を開始します。

sidekiq 3.3.1 app_name [9 of 25 busy] stopping

2. TERM で kill

kill -TERM [worker_pid]

USR1 で kill しただけではプロセスが立ち上がらなくなるだけなので、deploy が完了したら sidekiq を停止させます。プロセスを確認すると sidekiq のプロセスがなくなったことがわかります。以上で安全に停止することができます。

sidekiqctl

kill コマンドを使わなくても、ターミナルから sidekiqctl を使って sidekiq を停止することができます。

# start of deploy
# quiet sends USR1
sidekiqctl quiet [pidfile]
# ... deploy happens ...
# stop sends TERM with a hard deadline to kill -9
sidekiqctl stop [pidfile] [deadline_timeout]

USR1 での kill は sidekiqctl quiet [pidfile]、TERM は sidekiqctl stop [pidfile] [deadline_timeout] が対応しています。
deadline_timeout は 60 秒で、60 秒待っても停止しない場合は kill -9 で強制終了します。

Capistrano

Capistrano を使って deploy している人は、capistrano-sidekiq を使うことでこれらの動作を自動化できます。
これで自動に deploy 開始時に TSTP が送られ、完了時に再起動します。

参照

95
80
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
95
80