supervisord で Sails.js のプロセス管理

  • 23
    いいね
  • 0
    コメント
この記事は最終更新日から1年以上が経過しています。

supervisord で Sails.js のプロセス管理

Node のプロセスのデーモン化と言えば forever がメジャーですが、プロセス管理のやりづらさと不安定さが目立ってきたので安定している supervisord に切り替えてみました。

Qiita
©2013 *wolfinsheeps

supervisord のインストール

インストールは以下のコマンド

$ sudo easy_install supervisor

以下のコマンドでバージョンが表示出来ればインストールは完了です。

$ supervisord -v
3.0b2

Upstart で起動

supervisord 自体も死ぬことがあるので、そこは Upstart でカバー。いかに設定ファイルを記述。

$ sudo vim /etc/init/supervisord.conf

記述する設定内容はコチラ。

description     "supervisord"

start on runlevel [2345]
stop on runlevel [!2345]

respawn
exec /usr/bin/supervisord -n
pre-stop exec /usr/bin/supervisorctl stop all

早速 supervisord を起動しましょう。

$ sudo initctl start supervisord

supervisord の管理コマンド

以降の起動/再起動/停止はこのコマンドで出来るようになりました。

  • 起動: $ sudo initctl start supervisord
  • 停止: $ sudo initctl stop supervisord
  • 再起動:$ sudo initctl restart supervisord

supervisord の設定

設定ファイルは /etc/supervisord.conf に配置します。

$ sudo vim /etc/supervisord.conf

以下の様に設定を記述します

[unix_http_server]
file=/var/run/supervisor.sock                   ; path to your socket file

[supervisord]
logfile=/var/log/supervisor/supervisord.log     ; supervisord log file
logfile_maxbytes=50MB                           ; maximum size of logfile before rotation
logfile_backups=10                              ; number of backed up logfiles
loglevel=error                                  ; info, debug, warn, trace
pidfile=/var/run/supervisord.pid                ; pidfile location
nodaemon=false                                  ; run supervisord as a daemon
minfds=1024                                     ; number of startup file descriptors
minprocs=200                                    ; number of process descriptors
user=ubuntu                                     ; default user
childlogdir=/var/log/supervisor/                ; where child log files will live

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///var/run/supervisor.sock       ; use a unix:// URL  for a unix socket

[program:sailsapp]
command=/home/ubuntu/nvm/v0.10.12/bin/node /home/ubuntu/sailsapp/.app.js
directory=/home/ubuntu/sailsapp
user=ubuntu
autostart=true
redirect_stderr=true
stderr_logfile = /home/ubuntu/sailsapp/log/err.log
stdout_logfile = /home/ubuntu/sailsapp/log/out.log

program セクションのプロセス設定について

[program:sailsapp] に管理したいプロセスの設定を記述します。Sials の場合、アプリケーションのディレクトリパスを directory に記述しないと config/application.js などのユーザー定義設定がうまく読み込まれませんので注意してください。

詳細は 本家のドキュメント をご覧ください。

あと、ログを出力する先のディレクトリが存在することを確認してください。存在しないとプロセスが起動出来ません。

設定の反映

設定ファイルを記述したら、設定を再読み込みしましょう。

$ supervisorctl reread

プロセスの管理コマンド

以下のコマンドでプロセス管理が可能です。

  • 状態の表示: $ sudo supervisorctl status
  • プロセス名 起動: $ sudo supervisorctl start
  • プロセス名 停止: $ sudo supervisorctl stop
  • プロセス名 再起動: $ sudo supervisorctl restart
  • プロセス名 ログの表示: $ sudo supervisorctl tail