Supervisor是用Python開(kāi)發(fā)的一套通用的進(jìn)程管理程序,將一個(gè)普通的命令行進(jìn)程變?yōu)楹笈_(tái)Daemon,并監(jiān)控進(jìn)程狀態(tài),異常退出時(shí)可以進(jìn)行重啟言蛇。
安裝
pip install supervisor
yum -y install epel-release
yum install -y supervisor
# 查看版本
supervisord -v
相關(guān)配置
# supervisor配置文件[supervisor的配置文件默認(rèn)是不全的,不過(guò)在大部分默認(rèn)的情況下宵距,基本功能已經(jīng)滿足]
/etc/supervisord.conf
# 子進(jìn)程配置文件路徑[默認(rèn)子進(jìn)程配置文件為ini格式腊尚,可在supervisor主配置文件中修改]
/etc/supervisord.d/
子進(jìn)程配置
給需要管理的子進(jìn)程(程序)編寫(xiě)一個(gè)配置文件,放在/etc/supervisor.d/
目錄下满哪,以.ini
作為擴(kuò)展名(每個(gè)進(jìn)程的配置文件都可以單獨(dú)分拆也可以把相關(guān)的腳本放一起)婿斥。如任意定義一個(gè)和腳本相關(guān)的項(xiàng)目名稱的選項(xiàng)組(/etc/supervisord.d/test.ini):
# [program:應(yīng)用名稱]
[program:queue]
# 命令路徑,如果使用python啟動(dòng)的程序應(yīng)該為python /home/test.py,不建議放入/home/user/, 對(duì)于非user用戶一般情況下是不能訪問(wèn)
command=php /www/group/yii queue/listen
# 進(jìn)程數(shù)量
numprocs=2
# 當(dāng)numprocs為1時(shí),process_name=%(program_name)s - 當(dāng)numprocs>=2時(shí),%(program_name)s_%(process_num)02d
process_name=%(program_name)s_%(process_num)02d
# 如果是true,當(dāng)supervisor啟動(dòng)時(shí),程序?qū)?huì)自動(dòng)啟動(dòng)
autostart=true
# 自動(dòng)重啟
autorestart=true
# 啟動(dòng)延時(shí)執(zhí)行,默認(rèn)1秒
startsecs=10
# 啟動(dòng)嘗試次數(shù),默認(rèn)3次
startretries=3
# 以root用戶執(zhí)行
user=root
# 日志路徑
logfile=/tmp/queue.log
# 日志重定向翩瓜,指定每個(gè)文件的大小/文件個(gè)數(shù)/日志位置
;redirect_stderr = true
;stdout_logfile_maxbytes = 50MB
;stdout_logfile_backups = 10
;stdout_logfile = /srv/awesome/log/app.log
Supervisor管理awesome項(xiàng)目案例
awesome是一個(gè)基于aiohttp構(gòu)建的Web項(xiàng)目受扳,其中app.py為啟動(dòng)入口。
[program:awesome]
command = python3 /srv/awesome/www/app.py
directory = /srv/awesome/www
process_name= %(program_name)s
user = root
startsecs = 3
redirect_stderr = true
stdout_logfile_maxbytes = 50MB
stdout_logfile_backups = 10
stdout_logfile = /srv/awesome/log/app.log
命令說(shuō)明
# 查看所有進(jìn)程狀態(tài)
supervisorctl status
# 停止awesome
supervisorctl stop awesome
# 啟動(dòng)awesome
supervisorctl start awesome
# 重啟awesome
supervisorctl restart awesome
# 配置更新后加載新配置
supervisorctl update awesome
# 重啟配置中所有程序
supervisorctl reload
# 查看日志
supervisorctl tail -f awesome
使用supervisorctl前先啟動(dòng)supervisord兔跌,啟動(dòng)命令:/bin/supervisord -c /etc/supervisord.conf
或/usr/bin/python2 /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
systemctl start supervisord.service //啟動(dòng)supervisor并加載默認(rèn)配置文件
systemctl enable supervisord.service //將supervisor加入開(kāi)機(jī)啟動(dòng)項(xiàng)