簡(jiǎn)介
Supervisor是一個(gè)C/S系統(tǒng)萌朱,允許用戶控制類UNIX系統(tǒng)上的多個(gè)進(jìn)程。Supervisord將進(jìn)程作為其子進(jìn)程啟動(dòng)般渡,并且可以配置為在崩潰時(shí)自動(dòng)重新啟動(dòng)它們。也可以將其自動(dòng)配置為自行調(diào)用啟動(dòng)進(jìn)程侦副。通過簡(jiǎn)單易懂的INI樣式配置文件配置Supervisor。它提供了許多選項(xiàng)驼鞭,例如重啟失敗的進(jìn)程和自動(dòng)日志輪換秦驯。
安裝方式
- pip install supervisor
- conda install supervisor
- ubuntu還可以使用apt-get
配置文件
supervisor配置文件通常命名為supervisor.conf。supervisord
和supervisorctl
都會(huì)用到這個(gè)配置文件挣棕。若supervisord
和supervisorctl
沒有使用-c
參數(shù)指定配置文件译隘。則這兩個(gè)程序會(huì)按如下列出的順序自上而下的在這些位置尋找名為supervisord.conf的配置文件。
- $CWD/supervisord.conf
- $CWD/etc/supervisord.conf
- /etc/supervisord.conf
- /etc/supervisor/supervisord.conf (since Supervisor 3.3.0)
- ../etc/supervisord.conf (Relative to the executable)
- ../supervisord.conf (Relative to the executable)
Debian和Ubuntu版本的Supervisor都包含/etc/supervisor/supervisord.conf搜索路徑洛心。
執(zhí)行echo_supervisord_conf > supervisord.conf
可生成完整配置文件固耘,并含有詳盡注釋。示例配置如下所示:
01. [unix_http_server]
02. file=/tmp/supervisor.sock ; socket文件路徑
03.
04. [supervisord]
05. logfile=/tmp/supervisord.log ; 主日志文件词身,默認(rèn)位置:$CWD/supervisord.log
06. logfile_maxbytes=50MB ; 日志大小厅目,超出后輪轉(zhuǎn),默認(rèn)50MB
07. logfile_backups=10 ; 日志備份數(shù)量法严,0表示不備份损敷,默認(rèn)10
08. loglevel=info ; 日志記錄級(jí)別,默認(rèn)info渐夸,其他級(jí)別debug嗤锉、warn、trace
09. pidfile=/tmp/supervisord.pid ; pid文件墓塌,默認(rèn)supervisord.pid
10. nodaemon=false ; false表示后臺(tái)運(yùn)行,默認(rèn)false
11. minfds=1024 ; 啟動(dòng)時(shí)最少可用文件描述符數(shù)奥额,默認(rèn)1024
12. minprocs=200 ; 最少可用進(jìn)程描述符數(shù)苫幢,默認(rèn)200
13.
14. [rpcinterface:supervisor]
15. supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
16.
17. [supervisorctl]
18. serverurl=unix:///tmp/supervisor.sock ; 使用unix:// URL格式指定socekt文件位置
19.
20. [program:demo]
21. command=/bin/cat ; 運(yùn)行的程序,使用相對(duì)路徑可使用參數(shù)
22. directory=/tmp ; 執(zhí)行程序前進(jìn)入的目錄
23. autostart=true ; 是否隨supervisor同時(shí)啟動(dòng)垫挨,默認(rèn)true
24. startretries=3 ; 失敗后重試次數(shù)韩肝,默認(rèn)3
25. user=flask ; 啟動(dòng)程序用戶的uid
26.
27. [include]
28. files = relative/directory/*.ini ; 其它配置文件路徑
program配置
上面的示例中的配置文件已經(jīng)包含program
配置。若需要配置很多program
九榔,則應(yīng)在[include]
中引用各程序的配置文件哀峻。下面是flask的配置示例:
1. [program:flask]
2. command=/home/flask/miniconda3/envs/flask/bin/uwsgi /home/flask/FlaskTest/uwsgi.ini
3. directory=/home/flask/FlaskTest
4. autostart=true
5. startretries=3
6. user=flask
運(yùn)行supervisord
執(zhí)行supervisord -c /path_to_conf_file/supervisord.conf
使用指定配置文件啟動(dòng)。
執(zhí)行ps -elf | grep supervisor
檢查是否啟動(dòng)
啟動(dòng)supervisor時(shí)哲泊,將在默認(rèn)位置(包括當(dāng)前工作目錄)中搜索其配置文件剩蟀。若注重安全性,則可能需要在supervisor命令之使用
-c
參數(shù)切威,該命令指定配置文件的絕對(duì)路徑育特,以確保不會(huì)從含有惡意配置文件的目錄中啟動(dòng)supervisor。當(dāng)supervisor以root用戶身份啟動(dòng)而沒有使用此-c
參數(shù)時(shí)先朦,將發(fā)出警告缰冤。
運(yùn)行supervisorctl
supervisorctl將啟動(dòng)一個(gè)shell犬缨,該shell用來管理由supervisord運(yùn)行的程序。supervisorctl啟動(dòng)時(shí)棉浸,需要使用-c
參數(shù)指定與supervisord同樣的配置文件怀薛。否則使用supervisord同樣的查找方式查找配置文件。supervisorctl無參數(shù)啟動(dòng)時(shí)迷郑,進(jìn)入交互shell乾戏。若帶有參數(shù),例如supervisor -c /path_to_conf_file/supervisord.conf stop all
三热,則不會(huì)進(jìn)入交互式界面了鼓择。
supervisorctl常用命令如下:
supervisor> update # 重載新增和修改的配置文件,并重啟受影響的程序
supervisor> update all # 重載新增和修改的配置文件就漾,并重啟受影響的程序
supervisor> reload # 重啟supervisord
supervisor> reread # 重新加載守護(hù)程序的配置文件呐能,而無需添加/刪除(不重新啟動(dòng))
supervisor> restart <name> # 重啟指定程序,該命令不會(huì)reread配置文件
supervisor> restart all # 重啟所有程序抑堡,該命令不會(huì)reread配置文件
supervisor> start <name> # 啟動(dòng)指定程序
supervisor> start all # 啟動(dòng)所有程序
supervisor> status # 獲得所有程序狀態(tài)
supervisor> stop <name> # 停止指定程序
supervisor> stop all # 停止所有程序