supervisor是用python開發的一個在linux系統下的進程管理工具,可以方便的監聽,啟動,停止一個或多個進程。當一個進程被意外殺死后,supervisor監聽到后,會自動重新拉起進程。
一、supervisor的安裝
1、通過easy_install安裝
yum -y install python-setuptools
easy_install supervisor
2、通過yum安裝
yum -y install supervisor
3、通過pip安裝
yum -y install epel-release
yum -y install python-pip
pip install supervisor
安裝好后,會生成三個執行命令,echo_supervisord_conf,supervisorctl,supervisord。
?
二、supervisor的配置文件
supervisor的默認配置文件在 /etc/supervisord.conf 下,如果沒有可以通過如下命令生成
echo_supervisord_conf > /etc/supervisord.conf
常用的配置項如下:
[unix_http_server]
file=/tmp/supervisor.sock ; unix socket文件,supervisorctl會使用
;chmod=0700 ; socket文件權限
;chown=nobody:nogroup ; socket文件所屬用戶和用戶組[inet_http_server] ; web管理界面
port=127.0.0.1:9001 ; 管理界面的IP和端口
username=admin ; 登陸管理界面的用戶名
password=123456 ; 登陸管理界面的密碼[supervisord]
logfile=/tmp/supervisord.log ; 日志文件
logfile_maxbytes=50MB ; 日志文件大小,為0表示不限制
logfile_backups=10 ; 日志文件備份數量,為0表示不備份
loglevel=info ; 日志級別,也可設置為 debug,warn,trace
pidfile=/tmp/supervisord.pid ; PID文件路徑
nodaemon=false ; 是否前臺啟動,為false表示守護進程方式
minfds=1024 ; 打開文件描述符的最小值
minprocs=200 ; 創建進程數的最小值[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 通過 unix sokcet 連接supervisord
;serverurl=http://127.0.0.1:9001 ; 通過http方式連接supervisord[include]
files = /etc/supervisord/confs/*.conf ; 包含其他配置文件,可以是.conf或.ini
我們需要把 [include] 前面的注釋打開,并配置 files 的路徑。
創建 files 中配置的目錄。
mkdir -p /etc/supervisord/confs/
三、配置一個php腳本進程
我們在?/etc/supervisord/confs/ 目錄下創建一個 demo.conf 文件。
;demo表示程序名稱
[program:demo]
;需要執行的命令
command=php demo.php
;命令執行的目錄
directory=/data/wwwroot
;環境變量
environment=PATH="/data/nmp/php/bin/"
;哪個用戶運行
user=root
;是否自啟動
autostart=true
;是否自動重啟
autorestart=true
;自動重啟時間間隔,單位秒
startsecs=3
;錯誤日志文件
stderr_logfile=/tmp/demo.err.log
;輸出日志文件
stdout_logfile=/tmp/demo.out.log
demo.php的代碼如下:
<?php$i = 0;
while(true) {$i++;echo $i, PHP_EOL;sleep(1);
}
四、管理進程。
管理進程,需要我們啟動?supervisor 服務,這里我們配置 systemctl,開機自動啟動?supervisor。
創建?/usr/lib/systemd/system/supervisord.service 文件,配置如下:
[Unit]
Description=Supervisor daemon[Service]
Type=forking
ExecStart=/usr/bin/supervisord
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s[Install]
WantedBy=multi-user.target
啟用配置
systemctl enable supervisord.service
啟動?supervisord
systemctl start supervisord.service
成功后,就可以通過?supervisorctl 交互命令管理進程腳本了。
讀取有更新的配置文件
supervisorctl reread
更新配置文件修改過的程序
supervisorctl update
如果修改過?/etc/supervisord.conf 請使用如下命令
supervisorctl reload
啟動,停止,重啟,程序。
supervisorctl start 程序名
supervisorctl stop 程序名
supervisorctl restart 程序名
五、supervisor圖形化管理界面
需要開啟?/etc/supervisord.conf 文件中的 [inet_http_server]
[inet_http_server]
port=0.0.0.0:9001
username=admin
password=123456
設置完后,要開放 9001 端口,并重啟?supervisor
firewall-cmd --zone=public --add-port=9001/tcp --permanent
firewall-cmd --reload
重啟?supervisor
supervisorctl reload