Deploying
Supervisor
CentOS なら epel パッケージに含まれている。
% yum install supervisor
- アプリケーション:
play-app - 実行ユーザ:
app (9001|9002)の複数プロセスで起動
とすると以下のようになる。
% cat /etc/supervisord.conf
...
[program:play-app1]
command=/path/to/play-app/bin/play-app -Dhttp.port=9001 -Dpidfile.path=/dev/null
;priority=999
autostart=true
autorestart=true
startsecs=10
startretries=3
exitcodes=0,2
stopsignal=TERM
stopwaitsecs=10
user=app
log_stdout=true
log_stderr=true
logfile=/path/to/cat.log
logfile_maxbytes=1MB
logfile_backups=10
[program:play-app2]
command=/path/to/play-app/bin/play-app -Dhttp.port=9002 -Dpidfile.path=/dev/null
...
pidfile.pathは/dev/nullに送るようにする。 Supervisor がプロセスを管理するため不要。Play が生成するRUNNING_PIDファイルが残ってしまった場合に、自動再起動ができない。stopsignalはTERMを送る。設定サンプルにあるQUITでは終了しない。
起動スクリプト /etc/init.d/supervisord を用いれば、設定したプロセスを一括してデーモン起動できる。
% service supervisord {start|stop|status|restart|reload|force-reload|condrestart}
supervisorctl を使うことで、プロセス毎に管理できる。
% supervisorctl
play-app1 RUNNING pid 12345, uptime 0:00:10
play-app2 RUNNING pid 23456, uptime 0:00:10
supervisor> stop play-app2
play-app2: stopped
supervisor>