■supervisorとは?
https://www.task-notes.com/entry/20170311/1489224418
Supervisor とは Python 製のプロセス管理ツールで、プログラムなどを簡単にデーモン化することができます。
https://qiita.com/yushin/items/15f4f90c5663710dbd56
プロセス管理/デーモン化のツール。
コンフィグちょっと書くだけで簡単にデーモンプロセスの生成/管理が可能。
本家のドキュメントはこちら
http://supervisord.org/
【検証環境構築】
Amazonlinux2にsupervisorを入れてみる
【参照】
https://qiita.com/abouch/items/3f4b422c7d9048936629
http://supervisord.org/installing.html ←公式
pipのインストール
sudo easy_install pip
Installed /usr/lib/python2.7/site-packages/pip-19.1.1-py2.7.egg
supervisorのインストール
pip install supervisor
Successfully installed meld3-1.0.2 supervisor-4.0.3
バージョン確認
supervisord -v
4.0.3
サービス起動設定を行う
pipでのインストールではデフォルトではsupervisord自体のサービス管理は含まれません。動かすために以下の設定を行います。
デフォルトコンフィグファイル生成
echo_supervisord_conf コマンドで設定ファイルの雛形が出力されるのでこれを/etc/supervisord.confに書き出す。
echo_supervisord_conf > /etc/supervisord.conf
includeコンフィグ用のディレクトリ作成
sudo mkdir /etc/supervisord.d
ログ出力先のディレクトリを作成、log rotationの設定も行っておきます。
sudo mkdir /var/log/supervisor/
sudo sh -c "echo '/var/log/supervisor/*.log {
missingok
weekly
notifempty
nocompress
}' > /etc/logrotate.d/supervisor"
supervisord.conf修正
cp -p /etc/supervisord.conf /etc/supervisord.conf.org
diff /etc/supervisord.conf.org /etc/supervisord.conf
======
28c28,29
< logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
---
> ;logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
> logfile=/var/log/supervisor/supervisord.log
32c33,34
< pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
---
> ;pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
> pidfile=/var/run/supervisord.pid
151c153
< ;[include]
---
> [include]
152a155
> files = supervisord.d/*.ini
※上記の説明
;logfile=/tmp/supervisord.log
logfile=/var/log/supervisor/supervisord.log
pid, includeの設定
pidファイルは/var/run/以下に生成するようにし、
/etc/supervisord.d/以下の設定ファイルをincludeできるようにします。
pidファイル
;pidfile=/tmp/supervisord.pid
pidfile=/var/run/supervisord.pid
includeセクションがをイキにして下記の用に修正
[include]
files = supervisord.d/*.ini
supervisord本体のシステムサービス登録
CentOS6系
initスクリプトは以下を使用
https://github.com/Supervisor/initscripts/blob/master/redhat-init-equeffelec
sudo curl -o /etc/rc.d/init.d/supervisord https://raw.githubusercontent.com/Supervisor/initscripts/master/redhat-init-equeffelec
sudo chmod 755 /etc/rc.d/init.d/supervisord
sudo chkconfig --add supervisord
CentOS7系:systemdに登録
/etc/systemd/system/supervisord.serviceを用意
sudo sh -c "echo '[Unit]
Description=Supervisor process control system for UNIX
Documentation=http://supervisord.org
After=network.target
[Service]
ExecStart=/usr/bin/supervisord -n -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=50s
[Install]
WantedBy=multi-user.target' > /etc/systemd/system/supervisord.service"
サービス起動確認
systemctl start supervisord
systemctl status supervisord
systemctl stop supervisord
systemctl enable supervisord.service
特定の処理をデーモン化してみる
動作確認用に10秒毎に現在時刻を出力するシェルを用意
/home/hoge/hello.sh
#!/bin/sh
while true
do
sleep 10s
echo "hello "`date`
done
このシェルを実行するプロセス設定ファイルを以下のように作成
sudo sh -c "echo '[program:hello]
directory=/home/hoge
command=/bin/sh hello.sh
user=root
autorestart=true ;
stdout_logfile=/home/hoge/hello.log ;
redirect_stderr=true ;
' > /etc/supervisord.d/hello.ini"
動作確認
tail -f /home/tcmobile/hello.log
→タイムスタンプの値が出続けていればOK
デーモンプロセス一覧確認
supervisorctl
hello RUNNING pid 14742, uptime 0:01:43
動作している
プロセスを停止してみる
supervisorctl stop hello
supervisorctl
hello STOPPED Jun 27 07:02 PM
止まっている
管理画面について
https://debug-life.net/entry/989
WebUIが存在するが今回は置く
Supervisorの検証はここまで