設定
設定ファイルは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