Supervisorでnginxを管理してみる

daemontoolsを使っていますが、設定や導入の分かりやすさやからSupervisorを使いはじめています

http://supervisord.org

インストールや細かい設定は省きますが、/etc/supervisord.confに外部設定ファイルを参照するようにしてデーモンを管理するのがいいようです。

[include]
files = /etc/supervisord.d/*.conf

nginxを追加してみる

/etc/supervisord.d/nginx.confを新たに作成してSupervisor配下にいれます。

[program:nginx]
command=//usr/sbin/nginx -c /etc/nginx/conf/nginx.conf
process_name=%(program_name)s
numprocs=1
stopsignal=QUIT

起動に成功するとsupervisorctlで確認することができます

$ supervisorctl status
nginx                            RUNNING    pid 11667, uptime 14:46:21

再起動もsupervisorctlで行います

$ supervisorctl restart nginx
nginx: stopped
nginx: started

nginxにHUPシグナルを送りたい

nginxはHUPを受信すると、設定ファイルを読み込んで、エラーがなければ 新しい設定ファイルを適用してくれる仕組みがあります。

新しい設定が適用されると新しいworker processが立ち上がり、古いworker processは緩やかにshutdown差し替わってくれるので、実際はこちらを使いたい場合が多いでしょう。

supervisorctlには特定配下のデーモンにHUPを送る仕組みはないようなので、直接HUPを送ることにします

$ supervisorctl status nginx | sed "s/.*[pid ]\([0-9]\+\)\,.*/\1/" | xargs kill -HUP

これで新しい設定を適用することができました

参考: http://webos-goodies.jp/archives/deploying_tornado_with_supervisord.html

久々の投稿、、、