使用supervisor 管理linux進程 實例 管理uwsgi進程

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用戶 以免引起不必要的異常

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章