1、安裝supervisor
方式1:
apt install supervisor
方式2:
注意要在Python2.7環境下,supervisor不支持Python3
pip install supervisor
2、supervisor配置文件 默認會生成一個文件 /etc/supervisor/supervisor.conf 默認的配置儘量不要去動它,只增加我們需要的配置
配置詳解
; 表示添加註釋
[unix_http_server]
file=/var/run/supervisor.sock ;UNIX socket 文件,supervisorctl 時使用 supervisorctl命令會進入一個終端管理界面,用於快速啓動supervisor管理的進程
chmod=0700 ;socket文件的mode,默認是0700
;chown=nobody:nogroup ;socket文件的owner,格式:uid:gid
[inet_http_server] ;HTTP服務器,提供web管理界面
port=127.0.0.1:9999 ;Web管理後臺運行的IP和端口,注意該端口不能被佔用
username=user ;登錄管理後臺的用戶名
password=123 ;登錄管理後臺的密碼
[supervisord]
childlogdir=/var/log/supervisor ;指定日誌文件的目錄
logfile=/var/log/supervisor/supervisord.log ;指定日誌文件,默認是 $CWD/supervisord.log
logfile_maxbytes=50MB ;指定日誌文件大小,超出會rotate,默認 50MB,如果設成0,表示不限制大小
logfile_backups=10 ;指定日誌文件保留備份數量默認10,設爲0表示不備份
loglevel=info ;指定日誌級別,默認info,其它: debug,warn,trace
pidfile=/var/run/supervisord.pid ;指定pid 文件
nodaemon=false ;是否在前臺啓動,默認是false,即以 daemon 的方式啓動
minfds=1024 ;可以打開的文件描述符的最小值,默認 1024
minprocs=200 ;可以打開的進程數的最小值,默認 200
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ;通過UNIX socket連接supervisord,路徑與unix_http_server部分的file一致
;包含其它配置文件
[include]
files = /etc/supervisor/conf.d/*.conf ;可以指定一個或多個以.conf結束的配置文件
新增自己的進程配置 demo
[program:demo] ; [program:demo] 是被管理的進程配置參數,demo是進程的名稱,也是supervisor管理的名稱,不能重複
directory = /home/ass ;進程加載目錄
command=/home/ass/catalina.sh run ;進程啓動命令
autostart=true ;在supervisord啓動的時候也自動啓動
autorestart=true ;程序退出後自動重啓,可選值:[unexpected,true,false],默認爲unexpected,表示進程意外殺死後才重啓
startsecs=10 ;啓動10秒後沒有異常退出,就表示進程正常啓動了,默認爲1秒,在管理後臺進程時可以設置爲0
stopwaitsecs=10 ;設置管理的進程停止後等待時間,
startretries=3 ;啓動失敗自動重試次數,默認是3
user=root ;用哪個用戶啓動進程,默認是root
priority=999 ;進程啓動優先級,默認999,值小的優先啓動
stdout_logfile=/var/log/run.log ;指定日誌文件位置,注意這個目錄位置需要提前建立,並且當前用戶擁有讀寫權限
stderr_logfile=/var/log/err.log ;指定錯誤日誌文件位置,注意redirect_stderr爲真後 無需再配置
redirect_stderr=true ;把stderr重定向到stdout,默認false,開啓後無需再設置 stderr_logfile
stdout_logfile_maxbytes=20MB ;stdout 日誌文件大小,默認50MB
stdout_logfile_backups = 20 ;stdout 日誌文件備份數,默認是10
stopasgroup=false ;默認爲false,進程被殺死時,是否向這個進程組發送stop信號,包括子進程
killasgroup=false ;默認爲false,向進程組發送kill信號,包括子進程
daemon=true ;設置爲守護進程,當主進程被殺死的時候 子進程也被殺死
3、實例:supervisor管理uwsgi進程
增加配置文件:/etc/supervisor/conf.d/my_uwsgi.conf
[program:extend]
directory = /home/aes/my_project/python_project/django-vue-extend/backend
command=uwsgi /home/aes/my_project/python_project/django-vue-extend/backend/uwsgi.ini
user=aes
startsecs=0
stopwaitsecs=0
stdout_logfile=/home/aes/my_project/python_project/django-vue-extend/backend/run.log
redirect_stderr=true
autostart=true
autorestart=true
daemon=true
4、使用supervisor管理
1、啓動或重載服務
指定配置文件啓動
supervisord -c /etc/supervisor/supervisor.conf
重載supervisor服務
supervisorctl reload
2、使用supervisorctl管理自己的進程
先使用supervisorctl 進入supervisor管理終端
supervisorctl
status #查看管理的進程運行狀態
update #配置更新後使用該命令更新supervisor服務
reload #重載supervisor服務
start extend #啓動extend進程
stop extend #停止extend進程
restart extend #重啓extend進程
3、如果你配置了web界面 [inet_http_server] 那麼可以使用web界面來管理進程
瀏覽器訪問你配置的端口,本例訪問http://127.0.0.1:9999
輸入用戶名密碼,即可進入web管理界面
如圖:在這裏可以很方便的管理進程
5、使用過程中的錯誤解決
最常見的錯誤有三種
IOError: [Errno 13] Permission denied: ‘/var/log/supervisor/supervisord.log’
Error: Cannot open an HTTP server: socket.error reported errno.EACCES (13)
error: <class ‘socket.error’>, [Errno 13] Permission denied: file: /usr/lib/python2.7/socket.py line: 228
這些錯誤都是由於目錄或文件的權限導致的
因此再安裝supervisor的時候儘量使用默認的用戶,不要使用root用戶 以免引起不必要的異常