PythonのSupervisorによるプロセスモニタリングおよび自動起動
2153 ワード
supervisorはPythonで開発された汎用的なプロセス管理プログラムで、普通のコマンドラインプロセスをバックグラウンドdaemonに変更し、プロセス状態を監視し、異常終了時に自動的に再起動することができます.
まず2つのコマンドを理解します.
supervisord:supervisorのサーバ側部分、supervisorを起動するとこのコマンドが実行されます
supervisorctl:start、stop、status、reloadなどの操作を実行できるsupervisorのコマンドラインウィンドウを起動します.
需要:redis-serverこのプロセスはredisを実行するサービスです.私たちはこのサービスが意外に停止した後に自動的に再起動することを要求します.
インストール(Centos):
yum install python-setuptools
easy_install supervisor
インストールに成功したかどうかをテストします.
echo_supervisord_conf
プロファイルの作成:
echo_supervisord_conf >/etc/supervisord.conf
プロファイルの変更:
supervisord.conf最終増加:
[program:redis]
command=redis-server//実行するコマンド
Autostart=true//supervisor起動時に同時に起動するかどうか
Autorestart=true//プログラムがexitを飛び出したとき、このプログラムは自動的に再起動します
startsecs=3//プログラム再起動時にruning状態にとどまる秒数
コマンドの実行:
supervisord//supervisorの起動
supervisorctl//コマンドラインを開く
[root@vm14211 ~]# supervisorctl redis RUNNING pid 24068, uptime 3:41:55
ctl中:help//表示コマンド
ctl中:status//ステータス表示
問題:
1 redisが現れるのはrunningではなくFATAL状態
ロゴを見に行くべきだ
logは/tmp/supervisord.log
2ログに表示されます.
gave up: redis entered FATAL state, too many start retries too quickly
redisを変更します.confのdaemonizeはno
supervisorを使用すると、自分で勝手にサービスを再起動することはできません.そうしないと、supervisorの監視に影響し、supervisorctlのstart/stop/reloadコマンドを使用してサービス管理操作を行います.
検証の完了:
1 ps aux | grep redis
[root@vm1~]# ps aux | grep redis root 30582 0.0 0.0 9668 1584 ? S 14:12 0:00 redis-server
2 kill 30582
3
[root@vm1 ~]# ps aux | grep redis root 30846 0.0 0.0 9668 1552 ? S 15:19 0:00 redis-server
この時pidが更新されたのを見ました.
Web管理インタフェース:
supervisord.confの[img_http_server]セクションでは、supervisorctlでreloadを使用するとWeb管理インタフェースが起動します.
まず2つのコマンドを理解します.
supervisord:supervisorのサーバ側部分、supervisorを起動するとこのコマンドが実行されます
supervisorctl:start、stop、status、reloadなどの操作を実行できるsupervisorのコマンドラインウィンドウを起動します.
需要:redis-serverこのプロセスはredisを実行するサービスです.私たちはこのサービスが意外に停止した後に自動的に再起動することを要求します.
インストール(Centos):
yum install python-setuptools
easy_install supervisor
インストールに成功したかどうかをテストします.
echo_supervisord_conf
プロファイルの作成:
echo_supervisord_conf >/etc/supervisord.conf
プロファイルの変更:
supervisord.conf最終増加:
[program:redis]
command=redis-server//実行するコマンド
Autostart=true//supervisor起動時に同時に起動するかどうか
Autorestart=true//プログラムがexitを飛び出したとき、このプログラムは自動的に再起動します
startsecs=3//プログラム再起動時にruning状態にとどまる秒数
コマンドの実行:
supervisord//supervisorの起動
supervisorctl//コマンドラインを開く
[root@vm14211 ~]# supervisorctl redis RUNNING pid 24068, uptime 3:41:55
ctl中:help//表示コマンド
ctl中:status//ステータス表示
問題:
1 redisが現れるのはrunningではなくFATAL状態
ロゴを見に行くべきだ
logは/tmp/supervisord.log
2ログに表示されます.
gave up: redis entered FATAL state, too many start retries too quickly
redisを変更します.confのdaemonizeはno
supervisorを使用すると、自分で勝手にサービスを再起動することはできません.そうしないと、supervisorの監視に影響し、supervisorctlのstart/stop/reloadコマンドを使用してサービス管理操作を行います.
検証の完了:
1 ps aux | grep redis
[root@vm1~]# ps aux | grep redis root 30582 0.0 0.0 9668 1584 ? S 14:12 0:00 redis-server
2 kill 30582
3
[root@vm1 ~]# ps aux | grep redis root 30846 0.0 0.0 9668 1552 ? S 15:19 0:00 redis-server
この時pidが更新されたのを見ました.
Web管理インタフェース:
supervisord.confの[img_http_server]セクションでは、supervisorctlでreloadを使用するとWeb管理インタフェースが起動します.
[inet_http_server] ; inet (TCP) server disabled by default
port=*: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))