Supervisorの使用方法

スポンサーリンク

Supervisor の使用方法をまとめました。

Supervisorのインストール

Supervisor とは Python 製のプロセス管理ツールで、プログラムなどを簡単にデーモン化することができます。インストールは以下の通りです。

$ sudo apt-get install supervisor
$ sudo yum install supervisor

インストールが完了すると起動スクリプトが/etc/init.d/supervisorに、設定ファイル類が/etc/supervisor以下に作成されます。インストール時に作成される設定ファイルには最低限の設定が書かれていますが、echo_supervisord_confコマンドを使用すると様々な設定項目が書かれたファイルを作成できます。

$ echo_supervisord_conf > /etc/supervisor/supervisord.conf

操作にはsupervisordsupervisorctlコマンドを使用します。Supervisor を使用するには supervisord であらかじめ起動しておく必要があります。supervisorctl は Supervisor のプロセスを管理するコマンドです。基本的に操作はsupervisorctlを使用します。

$ sudo service supervisor start

直接コマンドで起動する場合は以下の通りです。-cで設定ファイルを指定してください。停止コマンドは無いので停止したい時はプロセスをkillする必要があります。-nオプションを使用するとフォアグラウンドで起動するためctrl + cで停止可能です。

$ sudo supervisord -c /etc/supervisor/supervisord.conf

pip でもインストール出来ますが起動スクリプトは作成しないといけません。その場合は  このページ なども参考になります。

 Installing — Supervisor 3.3.1 documentation
 GitHub - Supervisor/initscripts: User-contributed OS init scripts for Supervisor

Supervisor設定ファイル

Supervisor 全体の設定ファイルが/etc/supervisor/supervisord.confになります。起動設定やログファイル、PIDディレクトリなどを記述していきます。実行するプロセスに関しては別ファイルにして[include]セクションで読み込むのが分かり易いです。

 Configuration File — Supervisor 3.3.1 documentation

管理プロセスファイル

Supervisor で管理するプロセスの設定ファイルを作成します。supervisord.confファイル内に一緒に記述することもできますが、基本は supervisord.conf 内の[include]セクションに指定したディレクトリ内にファイルを作成します。

[include]
files = /etc/supervisor/conf.d/*.conf

program のセクションが 1 つの管理プロセスになります。

[program:testapp]
command=/home/ubuntu/projects/testapp/run.bash
autostart=true
autorestart=true
stopsignal=QUIT
stdout_logfile=/var/log/supervisor/testapp.log
stderr_logfile=/var/log/supervisor/testapp-error.log
user=ubuntu
directory=/home/ubuntu/projects/testapp
environment=

directoryで指定したディレクトリでcommandで指定したコマンドがuserによって実行されます。例えばbundle exec rails sなどのコマンドもそのまま記述できますが、実行時の環境変数などの問題もあるので起動シェルを用意するのが一般的かと思います。シェルの場合は実行権限を付与するのを忘れないように。

stdout_logfilestderr_logfileは実行されたコマンドが出力する標準出力と標準エラー出力が記録されます。stopsignalは停止する際に送られるシグナルです。

他にもlogfileは設定でローテートする事も可能です。その他のコマンドは以下ページを参照して下さい。

 Configuration File — Supervisor 3.3.1 documentation

supervisorctlコマンド

supervisorctlはプロセスを管理するコマンドラインツールです。引数なしか-iオプションを付けて実行するとインタラクティブシェルが起動します。

$ sudo supervisorctl
sample_program                    STOPPED    Feb 26 01:32 PM
supervisor>

通常は上記の方法ではなくsupervisorctl <command> <args>で実行します。主なコマンドは以下の通りです。コマンドの一覧はsupervisorctl helpで確認できます。

コマンド 引数 機能
status none
<name>
プロセスのステータスを取得する。
start <name>
<gname>:*
all
プロセスを起動する。
stop <name>
<gname>:*
all
プロセスを停止する。
reread - デーモンの設定ファイルの読込み。
add <name> 指定したプロセスやグループを管理対象に追加して起動する。
remove     <name> 指定したプロセスやグループを管理対象から削除する。
update - 全ての設定ファイルを再読込みして変更があればaddremoveをする。
restart <name>
<gname>:*
all
プロセスを再起動する。rereadで再読込していてもaddして有効になっていなければ設定は適用されない。
reload - Supervisorデーモンを再起動してプロセスを全て起動する。デーモンの再起動なので設定も全て再読込みされて最新になる。
tail <name>
[stdout|stderr]
対象プロセスのログを確認する。Linux の tail コマンドと同様に-fオプションも使える。デフォルト stdout
clear <name>
all
対象プロセスのログファイル(プロセスファイルで指定しているstdoutとstderrのlogfile)をクリアする。
version - Supervisord のバージョンを確認する。

Web管理画面

Supervisor にはWeb上からプロセスの管理ができるようになっています。supervisord.confに以下の設定を記述しましょう。echo_supervisord_confで設定ファイルを作成している場合はコメントアウトされているはずです。Supervisor を再起動したらブラウザからhttp://<ip>:9001にアクセスできるようになります。

[inet_http_server]         ; inet (TCP) server disabled by default
port=0.0.0.0:9001        ; (ip_address:port specifier, *:port for all iface)
username=user              ; (default is no username (open server))
password=123               ; (default is no password (open server))