Unicornを同期的に再起動する

Unicornの再起動はシグナル(USR2等)を発行することで非同期的に行われるので、成功したのか失敗したのかがわかりづらい。
例えばCapistrano等でアプリケーションをデプロイしたあと、Unicornの再起動を行い、その再起動が成功か失敗かを判断したいことがある。

というわけで、 Unicorn を 同期的に restart するスクリプトを書いた。

使い方と仕組み

上記スクリプトを unicorn_restart.rb みたいな名前で保存し、以下のように Unicorn の PID ファイルを与えて実行します。

$ unicorn_restart.rb /tmp/unicorn.pid

これは以下のように動作します。

  1. unicorn の master プロセスに USR2 シグナルを送る
  2. unicorn.pid.oldbin を監視し、再起動が終わるのを待つ
  3. 再起動が終わったら、 unicorn.pid の 値を再起動前と比較し、値が変化していれば再起動成功とみなす

以上、よろしくお願いします。