プロセスの死活監視等を行うためのデーモン化ツールの一つ 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 で管理するプログラムを追加するためには、こちらのドキュメントにしたがって設定ファイルを追加します。
動きを確認するために、以下のような設定を追加してみます。
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 を操作 (-n
で supervisord
をデーモン化しない)
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!
...
sudo supervisorctl {status|restart|stop|start} {all|myprog}
supervisord の設定ファイルで接続を許可するホストを設定できます。セキュリティ上問題はありますが、例えば以下のようにすると任意のホストからパスワードなしで接続できます。
/etc/supervisor/supervisord.conf
[inet_http_server]
port = 0.0.0.0:9001
接続する際は -s
オプションでリモートホストを指定します。
supervisorctl -s http://xxx.xxx.xxx.xxx:9001 status