1.介紹
supervisor是一個(gè)進(jìn)程管理工具羡亩。
用途就是有一個(gè)進(jìn)程需要每時(shí)每刻不斷的跑,但是這個(gè)進(jìn)程又有可能由于各種原因有可能中斷状勤。當(dāng)進(jìn)程中斷的時(shí)候我希望能自動(dòng)重新啟動(dòng)它鞋怀,此時(shí),我就需要使用到了supervisor荧降。
這個(gè)工具主要就兩個(gè)命令:
supervisord : supervisor的服務(wù)器端部分接箫,啟動(dòng)supervisor就是運(yùn)行這個(gè)命令
supervisorctl:啟動(dòng)supervisor的命令行窗口
2.安裝
推薦方法pip install
pip install supervisor
3.使用案例
使用supervisor 啟動(dòng) python main.py 文件
vim /etc/supervisor/conf.d/demo.conf
添加以下內(nèi)容
[program:demo] #項(xiàng)目名稱為demo
command=python main.py #運(yùn)行腳本
stderr_logfile=/var/log/supervisor/error_demo.log #錯(cuò)誤日志
stdout_logfile=/var/log/supervisor/demo.log #輸出
directory=/root/demo/ #項(xiàng)目路徑
autostart=true #當(dāng)supervisor 啟動(dòng)時(shí)會(huì)自動(dòng)啟動(dòng)
user=root #用戶
autorestart=true #自動(dòng)重啟
更新配置
supervisorctl update
查看進(jìn)程運(yùn)行狀態(tài)
supervisorctl status
4.配置文件詳解
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; socket 路徑
;chmod=0700 ; socket 文件的權(quán)限
;chown=nobody:nogroup ; socket 所屬用戶及組
;username=user ; 用戶名
;password=123 ; 密碼
;[inet_http_server] ; 是否啟用服務(wù),默認(rèn)是關(guān)閉的(啟用的話可以看到supervisor 管理的服務(wù)狀態(tài))
;port=127.0.0.1:9001 ; 監(jiān)聽的IP及端口
;username=user ; 用戶名
;password=123 ; 密碼
[supervisord] ; supervisord 全局配置
logfile=/var/log/supervisor/supervisord.log ; supervisor 日志路徑
logfile_maxbytes=50MB ; 單個(gè)日志文件最大數(shù)
logfile_backups=10 ; 保留多少個(gè)日志文件(默認(rèn)10個(gè))
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/var/run/supervisord.pid ; pid 文件路徑
nodaemon=false ; 啟動(dòng)是否丟到前臺(tái)朵诫,設(shè)置為false 辛友,表示以daemon 的方式啟動(dòng)
minfds=1024 ; 最小文件打開數(shù),對應(yīng)系統(tǒng)limit.conf 中的nofile ,默認(rèn)最小為1024,最大為4096
minprocs=200 ; 最小的進(jìn)程打開數(shù)废累,對應(yīng)系統(tǒng)的limit.conf 中的nproc,默認(rèn)為200
;umask=022 ; (process file creation umask;default 022)
;user=chrism ; 啟動(dòng)supervisord 服務(wù)的用戶邓梅,默認(rèn)為root
;identifier=supervisor ; (supervisord identifier, default is 'supervisor')
;directory=/tmp ; 這里的目錄指的是服務(wù)的工作目錄
;nocleanup=true ;
;childlogdir=/tmp ; ('AUTO' child log dir, default $TEMP)
;environment=KEY=value ; (key value pairs to add to environment)
;strip_ansi=false ; (strip ansi escape codes in logs; def. false)
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;username=chris ; should be same as http_username if set
;password=123 ; should be same as http_password if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
; The below sample program section shows all possible program subsection values,
; create one or more 'real' program: sections to be able to control them under
; supervisor.
;[program:theprogramname] ; 定義一個(gè)守護(hù)進(jìn)程 ,比如下面的elasticsearch
;command=/bin/cat ; 啟動(dòng)程序使用的命令邑滨,可以是絕對路徑或者相對路徑
;process_name=%(program_name)s ; 一個(gè)python字符串表達(dá)式日缨,用來表示supervisor進(jìn)程啟動(dòng)的這個(gè)的名稱,默認(rèn)值是%(program_name)s
;numprocs=1 ; Supervisor啟動(dòng)這個(gè)程序的多個(gè)實(shí)例掖看,如果numprocs>1匣距,則process_name的表達(dá)式必須包含%(process_num)s,默認(rèn)是1
;directory=/tmp ; supervisord在生成子進(jìn)程的時(shí)候會(huì)切換到該目錄
;umask=022 ; umask for process (default None)
;priority=999 ; 權(quán)重哎壳,可以控制程序啟動(dòng)和關(guān)閉時(shí)的順序毅待,權(quán)重越低:越早啟動(dòng),越晚關(guān)閉归榕。默認(rèn)值是999
;autostart=true ; 如果設(shè)置為true尸红,當(dāng)supervisord啟動(dòng)的時(shí)候,進(jìn)程會(huì)自動(dòng)啟動(dòng)
;autorestart=true ; 設(shè)置為隨 supervisord 重啟而重啟刹泄,值可以是false外里、true、unexpected特石。false:進(jìn)程不會(huì)自動(dòng)重啟
;startsecs=10 ; 程序啟動(dòng)后等待多長時(shí)間后才認(rèn)為程序啟動(dòng)成功盅蝗,默認(rèn)是10秒
;startretries=3 ; supervisord嘗試啟動(dòng)一個(gè)程序時(shí)嘗試的次數(shù)。默認(rèn)是3
;exitcodes=0,2 ; 一個(gè)預(yù)期的退出返回碼姆蘸,默認(rèn)是0,2风科。
;stopsignal=QUIT ; 當(dāng)收到stop請求的時(shí)候,發(fā)送信號給程序乞旦,默認(rèn)是TERM信號,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2
;stopwaitsecs=10 ; 在操作系統(tǒng)給supervisord發(fā)送SIGCHILD信號時(shí)等待的時(shí)間
;user=chrism ; 如果supervisord以root運(yùn)行题山,則會(huì)使用這個(gè)設(shè)置用戶啟動(dòng)子程序
;redirect_stderr=true ; 如果設(shè)置為true兰粉,進(jìn)程則會(huì)把標(biāo)準(zhǔn)錯(cuò)誤輸出到supervisord后臺(tái)的標(biāo)準(zhǔn)輸出文件描述符
;stdout_logfile=/a/path ; 把進(jìn)程的標(biāo)準(zhǔn)輸出寫入文件中,如果stdout_logfile沒有設(shè)置或者設(shè)置為AUTO顶瞳,則supervisor會(huì)自動(dòng)選擇一個(gè)文件位置
;stdout_logfile_maxbytes=1MB ; 標(biāo)準(zhǔn)輸出log文件達(dá)到多少后自動(dòng)進(jìn)行輪轉(zhuǎn)玖姑,單位是KB、MB慨菱、GB焰络。如果設(shè)置為0則表示不限制日志文件大小
;stdout_logfile_backups=10 ; 標(biāo)準(zhǔn)輸出日志輪轉(zhuǎn)備份的數(shù)量,默認(rèn)是10符喝,如果設(shè)置為0闪彼,則不備份
;stdout_capture_maxbytes=1MB ; 當(dāng)進(jìn)程處于stderr capture mode模式的時(shí)候,寫入FIFO隊(duì)列的最大bytes值,單位可以是KB畏腕、MB缴川、GB
;stdout_events_enabled=false ; 如果設(shè)置為true,當(dāng)進(jìn)程在寫它的stderr
;stderr_logfile=/a/path ; 把進(jìn)程的錯(cuò)誤日志輸出一個(gè)文件中描馅,除非redirect_stderr參數(shù)被設(shè)置為true
;stderr_logfile_maxbytes=1MB ; 錯(cuò)誤log文件達(dá)到多少后自動(dòng)進(jìn)行輪轉(zhuǎn)把夸,單位是KB、MB铭污、GB恋日。如果設(shè)置為0則表示不限制日志文件大小
;stderr_logfile_backups=10 ; 錯(cuò)誤日志輪轉(zhuǎn)備份的數(shù)量,默認(rèn)是10嘹狞,如果設(shè)置為0岂膳,則不備份
;stderr_capture_maxbytes=1MB ; 當(dāng)進(jìn)程處于stderr capture mode模式的時(shí)候,寫入FIFO隊(duì)列的最大bytes值刁绒,單位可以是KB闷营、MB、GB
;stderr_events_enabled=false ; 如果設(shè)置為true知市,當(dāng)進(jìn)程在寫它的stderr到文件描述符的時(shí)候傻盟,PROCESS_LOG_STDERR事件會(huì)被觸發(fā)
;environment=A=1,B=2 ; 一個(gè)k/v對的list列表
;serverurl=AUTO ; 是否允許子進(jìn)程和內(nèi)部的HTTP服務(wù)通訊,如果設(shè)置為AUTO嫂丙,supervisor會(huì)自動(dòng)的構(gòu)造一個(gè)url
5.常用操作命令
停止supervisor服務(wù)
service supervisor stop
啟動(dòng)supervisor服務(wù)
service supervisor start
關(guān)閉所有任務(wù)
supervisorctl shutdown
啟動(dòng)或停止服務(wù)
supervisorctl stop|start program_name
查看所有任務(wù)狀態(tài)
supervisorctl status
更新配置并運(yùn)行
supervisorctl update