簡介
Supervisor 是一個用 Python 寫的進程管理工具,可以很方便的用來在 UNIX-like 系統(不支持 Windows)下啟動、重啟(自動重啟程序)、關閉進程(不僅僅是 Python 進程)
Supervisor 是一個 C/S 模型的程序,supervisord 是 server 端,supervisorctl 是 client 端
1. 基本命令
安裝:
1、sudo pip install supervisor
2、默認配置文件位置:
[root@localhost /]# cat etc/supervisord.conf
3、自定義配置目錄:
[root@localhost supervisord.d]# pwd
/etc/supervisord.d
[root@localhost supervisord.d]# ls
gunicorn.ini yun.ini
4、啟動服務:
[root@localhost /]# supervisord -c /etc/supervisord.conf
/usr/lib/python2.7/site-packages/supervisor/options.py:383: PkgResourcesDeprecationWarning: Parameters to load are deprecated. Call .resolve and .require separately.
return pkg_resources.EntryPoint.parse("x="+spec).load(False)
[root@localhost /]# ps -aux|grep supervisord
root 5135 0.1 0.8 226152 16736 ? Ss 22:13 0:00 /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
root 5137 0.0 0.0 112724 992 pts/0 R+ 22:13 0:00 grep --color=auto supervisord
注:kill 進程號
5、supervisorctl 操作:
輸入命令 supervisorctl 進入 supervisorctl 的 shell 交互界面:
help # 查看幫助
status # 查看程序狀態
stop program_name # 關閉 指定的程序
start program_name # 啟動 指定的程序
restart program_name # 重啟 指定的程序
tail -f program_name # 查看 該程序的日志
update # 重啟配置文件修改過的程序(修改了配置,通過這個命令加載新的配置)
2. 配置文件
2.1 默認配置文件解析:
位置:etc/supervisord.conf
內容:
# 指定了socket file的位置
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 文件,supervisorctl 會使用
;chmod=0700 ;socket文件的mode,默認是0700
;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid
#用於啟動一個含有前端的服務,可以從Web頁面中管理服務。其中,port用於設置訪問地址,username和password用於設置授權認證。
;[inet_http_server] ;HTTP服務器,提供web管理界面
;port=127.0.0.1:9001 ;Web管理后台運行的IP和端口,如果開放到公網,需要注意安全性
;username=user ;登錄管理后台的用戶名
;password=123 ;登錄管理后台的密碼
# 管理服務本身的配置
[supervisord]
logfile=/tmp/supervisord.log ;日志文件,默認是 $CWD/supervisord.log
logfile_maxbytes=50MB ;日志文件大小,超出會rotate,默認 50MB,如果設成0,表示不限制大小
logfile_backups=10 ;日志文件保留備份數量默認10,設為0表示不備份
loglevel=info ;日志級別,默認info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 文件
nodaemon=false ;是否在前台啟動,默認是false,即以 daemon 的方式啟動
minfds=1024 ;可以打開的文件描述符的最小值,默認 1024
minprocs=200 ;可以打開的進程數的最小值,默認 200
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ;通過UNIX socket連接supervisord,路徑與unix_http_server部分的file一致
;serverurl=http://127.0.0.1:9001 ; 通過HTTP的方式連接supervisord
; [program:xx]是被管理的進程配置參數,xx是進程的名稱
[program:xx]
command=/opt/apache-tomcat-8.0.35/bin/catalina.sh run ; 程序啟動命令
autostart=true ; 在supervisord啟動的時候也自動啟動
startsecs=10 ; 啟動10秒后沒有異常退出,就表示進程正常啟動了,默認為1秒
autorestart=true ; 程序退出后自動重啟,可選值:[unexpected,true,false],默認為unexpected,表示進程意外殺死后才重啟
startretries=3 ; 啟動失敗自動重試次數,默認是3
user=tomcat ; 用哪個用戶啟動進程,默認是root
priority=999 ; 進程啟動優先級,默認999,值小的優先啟動
redirect_stderr=true ; 把stderr重定向到stdout,默認false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默認50MB
stdout_logfile_backups = 20 ; stdout 日志文件備份數,默認是10
; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false ;默認為false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=false ;默認為false,向進程組發送kill信號,包括子進程
# 對事件進行的管理
;[eventlistener:theeventlistenername]
# 對任務組的管理 ,包含其它配置文件
;[group:thegroupname]
;programs=progname1,progname2 ; each refers to 'x' in [program:x] definitions
;priority=999 ; the relative start priority (default 999)
[include]
files = supervisord.d/*.ini ;可以指定一個或多個以.ini結束的配置文件
2.2 自定義進程配置
注:supervisord.d目錄用來存放用戶自定義的進程配置
例子:文件 qqc.ini
# 程序名稱,在 supervisorctl 中通過這個值來對程序進行一系列的操作
[program:qqc_one]
# 啟動命令,與手動在命令行啟動的命令是一樣的
command=gunicorn wsgi:application -b 0.0.0.0:8000 -k gevent -w 2 -t 10 -n yun-gunicorn -m 0022 --log-level=info --access-logfile=- --error-logfile=- --max-requests=5000
# 程序的啟動目錄
directory=/home/yun/projects/yun
# 可以通過 environment 來添加需要的環境變量,一種常見的用法是使用指定的 virtualenv 環境
environment=DJANGO_SETTINGS_MODULE=settings.test
# 指定用戶名
user=opt
# 日志目錄 需要注意當指定目錄不存在時無法正常啟動,所以需要手動創建目錄(supervisord 會自動創建日志文件)
stdout_logfile=/var/log/supervisor/yun-gunicorn.stdout.log
stderr_logfile=/var/log/supervisor/yun-gunicorn.stderr.log
# 日志備份數量
stdout_logfile_backups = 20
# 指定日志文件大小
stdout_logfile_maxbytes = 20MB
# 把 stderr 重定向到 stdout,默認 false,錯誤日志也會寫進stdout_logfile中
redirect_stderr=True
# 在 supervisord 啟動的時候也自動啟動
autostart=True
# 程序異常退出后自動重啟
autorestart=True
[program:qqc_two]
...
[program:qqc_free]
...
# 集中管理多個進程
[group:qqc]
programs=qqc_one,qqc_two,qqc_free
- 注意: supervisor不能監控后台進程,command 不能為后台運行命令