Supervisorを使ってLinuxを守るプロセスを実現します。

4413 ワード

この記事の著者:陳進堅ブログアドレス:https://jian1098.github.io CSDNブログ:https://blog.csdn.net/c_jian連絡先:[email protected]
前言
システムソフトウェアの開発をしたことがある人はいずれも出会うことができて、もし書き終わったプログラムはLinuxバックグランドが運行する時によくない処理が必要ならば、nohup&を使ってバックグランドに置くならば、スレッドに対して停止と再起動の操作を行いにくいです。Supervisor(http://supervisord.org)Pythonで書いたプロセス管理ツールで、起動、再起動、クローズ、予期せぬ停止自動再起動、ログ分割などの機能を簡単に実現できます。単一プロセスの制御に加えて、不幸なサーバに問題が発生して、すべてのアプリケーションが殺されてしまうような複数のプロセスを同時に起動して、シャットダウンしてもいいです。この時はsupervisorで同時にすべてのアプリケーションを起動してもいいです。
インストールSupervisorCentos
[root@ztg ~]# yum install epel-release	#     python         
[root@ztg ~]# yum install -y python-pip
[root@ztg ~]# pip install supervisor
Ubunt
[root@ztg ~]# apt-get install supervisor
設定supervisorプロファイルを生成
[root@ztg ~]# echo_supervisord_conf > /etc/supervisord.conf
もし次のエラーが発生したら
Traceback (most recent call last):
  File "/usr/bin/supervisord", line 5, in 
    from pkg_resources import load_entry_point
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 2655, in 
    working_set.require(__requires__)
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 648, in require
    needed = self.resolve(parse_requirements(requirements))
  File "/usr/lib/python2.6/site-packages/pkg_resources.py", line 546, in resolve
    raise DistributionNotFound(req)
pkg_resources.DistributionNotFound: meld3>=0.6.5
以下の4行のコマンドを実行してプロファイルを生成してください。
[root@ztg ~]# wget https://pypi.python.org/packages/source/m/meld3/meld3-1.0.2.tar.gz
[root@ztg ~]# tar -zxf meld3-1.0.2.tar.gz
[root@ztg ~]# cd meld3-1.0.2
[root@ztg ~]# python setup.py install
supervisorを編集し、最終的にはカスタム実行プログラムの設定情報を追加します。
[root@ztg ~]# vi /etc/supervisord.conf
[program:httpserver]
command=/bin/bash -c "/home/ztg/httpserver"
autostart=true
autorestart=true
startsecs=10
stdout_logfile=/var/log/go_http_server_info.log
stdout_logfile_maxbytes=2MB
stdout_logfile_backups=30
stdout_capture_maxbytes=2MB
stderr_logfile=/var/log/go_http_server_error.log
stderr_logfile_maxbytes=2MB
stderr_logfile_backups=30
stderr_capture_maxbytes=2MB
設定の説明
[program:   ]
command=/bin/bash -c "       ,         "
autostart=true     supervisor    
autorestart=true        ,      
startsecs=10
stdout_logfile=/var/log/go_http_server_info.log             
stdout_logfile_maxbytes=2MB	      
stdout_logfile_backups=30	        
stdout_capture_maxbytes=2MB	
stderr_logfile=/var/log/go_http_server_error.log	           
stderr_logfile_maxbytes=2MB
stderr_logfile_backups=30
stderr_capture_maxbytes=2MB
操作/etc/supervisord.confsupervisorを起動し、標準設定ファイルを使用します。
$ supervisord
または設定ファイルを指定します。
$ /usr/bin/supervisord -c /etc/supervisord.conf
supervisorを起動した後、supervisor関連命令を実行することができます。supervisorctl一般的なコマンド:
コマンド
説明
supervisortl stop program uname
プロセスを停止
supervisortl start program uname
プロセスを開始
supervisorcul retart program uname
あるプロセスを再起動します
supervisorcul stop all
すべてのプロセスを停止
supervisorcul reload
最新の設定ファイルを読み込み、既存のプロセスを停止し、新しい設定ですべてのプロセスを起動、管理します。
supervisorcul udate
最新の設定ファイルによって、新しい設定が起動されたり、変更されたプロセスがあります。構成が変更されていないプロセスは影響を受けずに再開されます。
運転状態を確認してコンソールに入り、コマンドを実行するとsupervisorctlコマンドを省きます。
$ supervisorctl
httpserver                       RUNNING   pid 34236, uptime 0:00:28
supervisor> stop httpserver
httpserver: stopped
Web管理ページsupervisorctlは、可視化されたWeb管理ページを提供し、遠隔操作が可能であるが、構成ファイルの手動で開く必要がある。
プロファイルを開く
$ vi /etc/supervisord.conf
次の行の前の番号を消して、データを修正して保存して終了します。
[inet_http_server]         ; HTTP    ,   web     
port=192.168.1.194:9001    ; Web         IP    ,       ,       
username=user              ;           
password=123               ;          
設定を再読み込み
$ supervisorctl reload
設定されたipとポートをブラウザで開くと(192.168.194:9001)登録枠を管理ページにイジェクトすることができます。
ログを見る
設定ファイルで定義されているログファイルにアクセスすればいいです。
$ tail -f /var/log/go_http_server_info.log
$ tail -f /var/log/go_http_server_error.log