supervisor

設定

設定ファイルはsupervisord.confであり、その中にいくつかのセクションが存在する

[supervisord]セクション

supervisordプロセスのグローバル変数を決定する

[supervisord]
logfile = /tmp/supervisord.log # supervisordプロセスのログが出力される
logfile_maxbytes = 50MB
logfile_backups=10 # ログローテーションのログの世代を決定する
loglevel = info
pidfile = /tmp/supervisord.pid
nodaemon = false # trueにすると、デーモンでなくフォアグラウンドで実行する
minfds = 1024 # supervisordが起動する前に必要とするファイルディスクリプタ数
minprocs = 200
umask = 022
user = chrism
identifier = supervisor
directory = /tmp
nocleanup = true # true にすると、起動時に古い子プロセスログを削除しない
childlogdir = /tmp
strip_ansi = false
environment = KEY1="value1",KEY2="value2"

[program:x]セクション

supervisordが子プロセスを起動したり、制御するために1つもしくは複数必要なセクション。program:fooなどプログラム名を記載する

[program:cat]
command=/bin/cat # プログラム起動時に実行するコマンド。絶対パス、もしくは相対パスを利用する
process_name=%(program_name)s # このプログラムが動作するプロセス名を決定する。numprocsを変更しない場合は特に気にする必要はないが、変更する場合は%(process_num)sなどを入れる必要がある
numprocs=1 # 起動時にプログラムのプロセスをいくつ起動させるかを決定する
directory=/tmp
umask=022
priority=999 # startとshutdownの優先順位を決定する。低いと“start all”時は最初に起動し、”stop all”時に最後に起動する
autostart=true # trueの場合、supervisordが起動したときに自動で起動される
autorestart=true # false, unexpected, trueを選択可能。falseだと自動でrestartしない、unexpectedだとexitcodesが発生した場合に自動でrestartする、trueの場合は無条件にrestartする
startsecs=10 # ここに指定した秒数より早く終了したら、終了コードにかかわらず起動失敗とみなす(デフォルト 1)
startretries=3 # 起動に失敗した場合にリトライする回数、この回数を超えるとステータスがFATALとなる
exitcodes=0,2 # 正常終了とみなす終了コード
stopsignal=TERM # プロセスを終了させるために使うシグナル。TERM,HUP,INT,QUIT,KILL,USR1,USR2から選択できる
stopwaitsecs=10 # この秒数が経ってもプロセスが終了しない場合、 SIGKILL を送信する
killasgroup=false # true なら、 SIGKILLを送信する際にプロセスグループ全体に送信する。Python programsをマルチプロセスで利用しているときなどに利用する
user=chrism # プロセスを実行するユーザー(supervisord が root で実行されているときのみ)
redirect_stderr=false # trueなら、標準エラー出力をsupervisordの標準出力にリダイレクトする
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stdout_capture_maxbytes=1MB
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups=10
stderr_capture_maxbytes=1MB
environment=A="1",B="2"
serverurl=AUTO
stdout_events_enabled=false # true を指定すると、標準出力への出力時にPROCESS_LOG_STDOUTイベントを発生させる
stderr_events_enabled=false # true を指定すると、標準エラー出力への出力時にPROCESS_LOG_STDERRイベントを発生させる

[group:x]セクション

[program:x]で設定した複数のプログラムを1つのグループとして設定することが可能

[group:foo]
programs=bar,baz # カンマでプログラムを指定する
priority=999

[eventlistener:x]セクション

supervisorにはevent listenerプールという特別なプロセスグループが存在する
このプールはsupervisorからのイベントを受取り、応答することができる
また[program:x]セクションのオプションをstdout_capture_maxbytes,stderr_capture_maxbytesを除いて利用することができる

[eventlistener:theeventlistenername]
command=/bin/eventlistener
process_name=%(program_name)s_%(process_num)02d
numprocs=5
events=PROCESS_STATE # イベントタイプを指定する。複数指定する場合はカンマ区切りとする
# イベントタイプについて
# http://supervisord.org/events.html#event-types
buffer_size=10 # event listenerバッファサイズ。もし超えた場合はバッファ内の古いeventから削除される
priority=-1
autostart=true
autorestart=unexpected
startsecs=1
startretries=3
exitcodes=0,2
stopsignal=QUIT
stopwaitsecs=10
user=chrism
redirect_stderr=true
stdout_logfile=/a/path
stdout_logfile_maxbytes=1MB
stdout_logfile_backups=10
stderr_logfile=/a/path
stderr_logfile_maxbytes=1MB
stderr_logfile_backups
environment=A="1",B="2"

参考

http://supervisord.org/configuration.html
http://webos-goodies.jp/archives/deploying_tornado_with_supervisord.html