supervisord (3) - autostart/autorestart -

2013-10-30T00:00:00+00:00 supervisord

デフォルトだと[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

てな感じで指定すれば良い模様

Event Pagesでchrome.contextMenus .pycをロードする仕組み