supervisord (3) - autostart/autorestart -
デフォルトだと[program:x]なセクションで定義したサービスはsupervisordが起動する際に自動で開始される。それがautostart=trueになっている模様。つまりfalseにした場合にはsupervisordが起動した際にはサービスも起動はしない
[program:redmine]
; 省略
autostart=false
的な定義をすれば良い。んでもってautorestartに関して
サービスが起動している状態でとりあえずプロセスIDを見る (unicornでgrep)
ps aux | grep unicorn
すると
kinjouj 26991 6.6 2.9 88236 60680 pts/2 Sl 12:59 0:04 unicorn_rails master -E production -c /var/www/redmine/config/unicorn.rb kinjouj 27020 0.0 2.7 88236 56408 pts/2 Sl 12:59 0:00 unicorn_rails worker[0] -E production -c /var/www/redmine/config/unicorn.rb kinjouj 27138 0.0 0.0 4452 832 pts/3 S+ 13:00 0:00 grep unicorn
っていうようにサービスが起動している状態が確認できる。でこのプロセスID(26991)をkillするとどうなるかっていうとサービスがもろもろオチる。でオチた場合にsupervisordにより自動で再起動されるようにしたい場合には
[program:redmine]
; 省略
autostart=false
autorestart=true
っていう感じで追加する。でautostart=falseにしているので起動しておいて、再度上記のようにプロセスIDを調べて落としてみると、その後にsupervisordによりunicornなプロセスが再起動される模様。ちなみにautorestartなオプションは「unexpected」となっている模様でデフォルトでtrueでは無い模様
余談1: 設定ファイルの読み込みに関して
supervisord.confは
- $CWD/supervisord.conf
- $CWD/etc/supervisord.conf
- /etc/supervisord.conf
から読まれるらしい。多分コマンドオプションとかで指定しない限りは上記のどれかから読み込まれる模様
余談2: [inet_http_server]と[unix_http_server]に関して
別にwebによる管理は必要ない、でもsupervisorctlを使いたい場合には
;[inet_http_server]
;port=127.0.0.1:9001
[unix_http_server]
file=/var/lib/supervisord/supervisor.sock
[supervisorctl]
serverurl=unix:///var/lib/supervisord/supervisor.sock
てな感じで指定すれば良い模様