プロセス管理システム supervisor の簡単な使い方
[履歴] [最終更新] (2018/10/28 00:31:53)

概要

プロセスの死活監視等を行うためのデーモン化ツールの一つ supervisor の簡単な使い方を記載します。

インストール

apt や yum によってインストールする場合は以下のようになります。

sudo apt install supervisor
sudo yum install supervisor

インストールされたファイルを確認します。

$ dpkg -L supervisor
...
/usr/bin/supervisorctl
/usr/bin/supervisord 
/etc/supervisor/supervisord.conf
/etc/init.d/supervisor

二つのコマンドについては man も追加されています。

man supervisord
man supervisorctl

supervisord の起動

supervisord で管理するプログラムを追加するためには、こちらのドキュメントにしたがって設定ファイルを追加します。

設定ファイル

動きを確認するために、以下のような設定を追加してみます。

chmod a+x /home/vagrant/myprog.bash

/home/vagrant/myprog.bash

#!/bin/bash

while :; do
    echo "Hello, world!"
    sleep 1
done

/etc/supervisor/conf.d/myprog.conf

[program:myprog]
command=/home/vagrant/myprog.bash
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/myprog.log
stderr_logfile=/var/log/supervisor/myprog-error.log
user=vagrant
directory=/home/vagrant/
environment=

起動

管理するプロセスではなく supervisor 自身 (supervisord) の起動です。

sudo /etc/init.d/supervisor start

直接 supervisord を操作 (-nsupervisordデーモン化しない)

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

既に supervisord が起動されている場合は以下のようなエラーが出ます。

Another program is already listening on a port that one of our HTTP servers is configured to use.

登録したプログラムのログが確認できます。

$ tailf /var/log/supervisor/myprog.log
Hello, world!
Hello, world!
Hello, world!
Hello, world!
...

supervisorctl による操作

sudo supervisorctl {status|restart|stop|start} {all|myprog}

リモートホストの supervisord を操作

supervisord の設定ファイルで接続を許可するホストを設定できます。セキュリティ上問題はありますが、例えば以下のようにすると任意のホストからパスワードなしで接続できます。

/etc/supervisor/supervisord.conf

[inet_http_server]
port = 0.0.0.0:9001

接続する際は -s オプションでリモートホストを指定します

supervisorctl -s http://xxx.xxx.xxx.xxx:9001 status
関連ページ
    概要 ロボットシステム開発のためのフレームワーク Robot Operating System (ROS) の環境構築および簡単な使い方について記載します。ここでは Debian9 を利用することにします。ROS は現行バージョン1 の Melodic Morenia ディストリビューションを扱います。 ROS 対応のロボット