supervisor で Unicorn プロセス監視
昔はプロセス管理といえば daemontools だったそうなのですが、 最近は Supervisor を使ってプロセス管理をすることが増えているようです。
私の ホームページ は Unicorn x Sinatra x nginx で動かしていますが、このUnicornプロセスが死んでも自動で再起動してくれるように、Supervisor を導入してみました。
Supervisor のインストール
サーバーの構成管理は Chef でやっておりますので 今回も Chef を使ってインストールします。
$ sudo chef-solo -j node.json -c solo.rb
Berksfile 中で github のURLを直接していますが、これは Opscode CommunityからDLできる supervisor のバージョンがgithubのものより古いためです。 Opscode Community のものだと supervisord がサービスに登録されません。そのうち修正されると思いますが。
supervisor.unix_http_server.chown
の値はUnicornプロセス起動させたいユーザー名と同じにして下さい。
デフォルト(root)のままだとUnixソケットまわりでpermission error
が出ます。
※セキュリティ上はオーナーはrootのままにしておいて、グループ権限で制御するのが正しいでしょう。
Supervisorにプロセスを監視させる
/etc/supervisor.d
ディレクトリ内にプロセス監視の設定ファイルを作ります。
↑のレシピを実行して下さい。これで準備は完了です。
$ supervisorctl status homepage RUNNING pid 945, uptime 1:37:02 $ ps x | grep unicorn 945 ? Sl 0:00 unicorn master -c unicorn.rb -E production -l0.0.0.0:8080 982 ? Sl 0:00 unicorn worker[0] -c unicorn.rb -E production -l0.0.0.0:8080 2242 pts/2 S+ 0:00 grep --color=auto unicorn
unicornがpid=945
で起動しています。kill
してみてプロセス再起動される事を確かめてみましょう。
$ kill 945 $ supervisorctl status homepage RUNNING pid 2301, uptime 0:00:01
pidが変わり無事再起動されたことがわかります。uptimeも1秒になっています。
手動での再起動もできます。デプロイ時には以下のコマンドを叩いてプロセスの再起動を行っています。
$ supervisorctl restart homepage homepage: stopped homepage: started
supervisorを導入していない方は非常に簡単ですので、やってみてください。