參考資料
- 官網(wǎng) https://pypi.org/project/supervisor/
Supervisor是什么?
A Process Control System
Supervisor是使用Python開發(fā)的一套通用的進程管理程序萌踱,能將一個普通的命令行進程轉變?yōu)楹笈_守護進程daemon
屡拨,并監(jiān)控進程狀態(tài)鸽扁,當異常退出時能自動重啟蚊夫。
Supervisor通過fork
或exec
的方式將被管理的進程當作Supervisor的子進程來啟動,只要在Supervisor的配置文件中將需要管理的進程的可執(zhí)行文件的路徑寫入即可妙蔗。當子進程掛掉的時候,父進程可以準確獲取子進程掛掉的信息免猾,另外也可以選擇是否自己啟動和報警是辕。
Supervisor可以為supervisord
或每個子進程設置一個非root
的用戶,使用這個用戶就可以管理它所對應的進程猎提。
Supervisor有什么用呢获三?
Supervisor是使用Python開發(fā)的CS服務,是Linux/Unix系統(tǒng)下的進程管理工具锨苏,可以方便的監(jiān)聽疙教、啟動、停止伞租、重啟一個或多個進程贞谓。使用Supervisor管理的進程,當一個進程被意外地殺死時Supervisor會監(jiān)聽到并自動將它重啟葵诈,因此可以很方便地做到進程自動恢復的功能裸弦,不再需要自己手工編寫腳本來控制。
為什么需要使用Supervisor呢作喘?
- 使用簡單
Supervisor提供了一種統(tǒng)一的方式來start
烁兰、stop
、monitor
進程徊都,進程可以單獨控制也可以成組控制沪斟,可以在本地或遠程的命令行或Web接口中配置Supervisor。
在Linux中很多程序都是一直運行著的暇矫,一般來說都需要自己編寫一個能夠實現(xiàn)進程start
/stop
/restart
/reload
的腳本主之,然后放到/etc/init.d/
文件夾下。這種做法的弊端是需要為每個程序都編寫一個類似的腳本李根,其次當這個進程掛掉的時候槽奕,Linux并不會自動重啟它,想要自動自動重啟的話房轿,還需要自己編寫一個監(jiān)控從重啟的腳本粤攒。
使用Supervisor可以完美的解決這些問題,Supervisor管理進程是通過fork
或exec
的方式將被管理的進程作為Supervisor的子進程來啟動囱持。這樣的話夯接,只要在Supervisor的配置文件中將管理的進程的可執(zhí)行文件的路徑寫入即可。其次被管理進程作為Supervisor的子進程纷妆,當子進程掛掉的時候盔几,父進程可以準確獲取子進程掛掉的信息,也就可以對掛掉的子進程進行自動重啟掩幢。
Supervisor支持使用INI
格式配置文件進行配置逊拍,容易掌握上鞠。而且它為每個進程提供了很多配置選項,可以使你很容易的重啟進程或自動的輪轉日志芯丧。
- 集中管理
Supervisor管理的進程以及進程組的信息全部都寫在一個INI
格式的配置文件中芍阎,管理Supervisor時可以在本地進行,也可以在遠程進行缨恒。Supervisor提供了一個Web界面方便使用Web界面進行監(jiān)控和管理進程能曾。
Supervisor可以對進程組統(tǒng)一管理,也就是說把需要管理的進程寫到一個組group
中肿轨,然后把這個組作為一個對象進行管理,如啟動蕊程、停止椒袍、重啟等操作,這是Linux系統(tǒng)沒有的功能藻茂。在Linux中要想停止一個進程只能一個一個的去停止驹暑,要么就編寫腳本去批量停止。
Supervisor與Linux自帶的init
進程管理有上面異同點呢辨赐?
Supervisor與Launchd优俘、Daemontools、Runit等程序有著相同的功能掀序,不同的是它并不作為ID為1的進程替代init
進程管理工具帆焕。相反,它用于控制應用程序不恭,并像其它程序一樣叶雹。簡單來說Supervisor服務管理的進程程序是作為Supervisor的子進程來運行的,因此Supervisor是父進程换吧。
- 方便
有些編譯運行的程序在安裝完畢后需要為其編寫啟動停止管理腳本折晦,編寫和維護麻煩不說,一旦進程在異常崩潰結束時許多程序都不會正確的重啟沾瓦。使用Supervisor啟動管理的程序满着,其進程是作為Supervisor的子進程來運行的,而且可以配置在進程崩潰停止時自動重啟贯莺。
- 準確
在UNIX上的進程通常很難獲得準確的up/down
狀態(tài)风喇,pid
文件經(jīng)常會說謊。Supervisor主進程將進程作為子進程啟動缕探,所以它總是知道其子進程正確的up/down
狀態(tài)响驴,可以方便地對這些數(shù)據(jù)進行查詢。
- 進程分組
進程支持分組啟動和停止撕蔼,也支持啟動順序豁鲤,即優(yōu)先級秽誊。Supervisor允許為進程分配優(yōu)先級,并允許用戶通過supervisorctl
客戶端發(fā)出命令琳骡,如“全部啟動”和“重新啟動所有”锅论,它們以預先分配的優(yōu)先級順序啟動¢购牛可將進程分為“進程組”最易,一組邏輯關聯(lián)的進程可以作為一個單元停止或啟動。
Supervisor組件包括那些呢炫狱?
- supervisord
supervisord
主進程是負責管理進程的服務藻懒,它會根據(jù)配置文件創(chuàng)建指定數(shù)量的應用程序的子進程,管理子進程的整個生命周期视译,對crash
的進程進行重啟嬉荆,對進程變化發(fā)送事件通知等。同時內(nèi)置的Web服務器和XML-RPC接口可以輕松實現(xiàn)進程管理酷含。
supervisord
主進程的配置文件位于:/etc/supervisor/supervisord.conf
- supervisorctl
Supervisor客戶端命令行工具鄙早,提供了一個類似Shell的操作接口,通過它可以連接到不同的supervisord
主進程上來管理它們各自不同的子程序椅亚,命令通過UNIX socket或TCP來和服務進行通訊限番。用戶通過命令行發(fā)送消息給supervisord
,可以查看進程狀態(tài)呀舔,加載配置文件弥虐,啟停進程,查看進程標準輸出和錯誤輸出媚赖,遠程操作等躯舔。
另外Supervisor服務端可要求客戶端提供身份驗證后進行操作
- WebServer
Supervisor提供了Web服務器功能,可通過Web控制進程省古,不過需要提前設置[inethttpserver]
配置選項粥庄。
- XML-RPC Interface
Supervisor提供了XML-RPC接口,像HTTP提供Web UI一樣用來控制Supervisor和由它運行的程序豺妓。
安裝
使用CentOS的YUM工具安裝
$ yum install supervisor
使用Python包管理工具pip
命令進行安裝
$ pip install supervisor
驗證安裝是否成功惜互,查看版本。
$ supervisord -v
4.0.2
創(chuàng)建supervisord
主進程配置文件
$ echo_supervisord_conf > /etc/supervisord.conf
使用echo_supervisord_conf
命令可以指定創(chuàng)建主進程文件的具體位置琳拭,默認一般會放到系統(tǒng)的/etc/
文件夾下训堆。
主進程配置
打開主進程的配置文件supervisord.conf
$ vim supervisord.conf
[unix_http_server]
file=/tmp/supervisor.sock ; UNIX socket文件默認路徑,supervisorctl命令會使用到白嘁。
;chmod=0700 ; UNIX socket文件的文件模式坑鱼,默認為0700。
;chown=nobody:nogroup ; UNIX socket文件的擁有者和組,格式為uid:gid鲁沥。
;username=user ; default is no username (open server)
;password=123 ; default is no password (open server)
; HTTP服務器配置項
;[inet_http_server] ; HTTP服務器呼股,提供Web UI管理界面。
;port=127.0.0.1:9001 ; Web管理后臺運行的IP和端口画恰,如果開放到公網(wǎng)上需注意安全性彭谁。
;username=user ; Web管理后臺登錄的用戶名
;password=123 ; Web管理后臺登錄的密碼
; 主進程配置項
[supervisord]
logfile=/tmp/supervisord.log ; 主進程的日志文件路徑,默認為當前路徑下的supervisord.log即$CWD/supervisord.log
logfile_maxbytes=50MB ; 主進程日志文件大小最大限制允扇,默認為50MB缠局,若設置為0則表示不限制,若超出則會rotate考润。
logfile_backups=10 ; 主進程日志文件保留備份的數(shù)量狭园,默認為10個,若設置為0表示不備份糊治。
loglevel=info ; 主進程日志文件的日志級別唱矛,默認為info,其它可選 debug,warn,trace
pidfile=/tmp/supervisord.pid ; 主進程編號文件俊戳,默認文件名為supervisord.pid
nodaemon=false ; 主進程是否在前臺啟動,默認false即以守護進程daemon的方式在后臺運行馆匿。
minfds=1024 ; 主進程可以打開的文件描述符的最小數(shù)量抑胎,默認為1024。
minprocs=200 ; 主進程可以打開的進程最小數(shù)量渐北,默認為200阿逃。
;umask=022 ; process file creation umask; default 022
;user=supervisord ; setuid to this UNIX account at startup; recommended if root
;identifier=supervisor ; supervisord identifier, default is 'supervisor'
;directory=/tmp ; default is not to cd during start
;nocleanup=true ; don't clean up tempfiles at start; default false
;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 rpcinterface:supervisor 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:x] sections.
; RPC配置項
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
; The supervisorctl section configures how supervisorctl will connect to
; supervisord. configure it match the settings in either the unix_http_server
; or inet_http_server section.
; 客戶端配置項
[supervisorctl]
; 通過UNIX socket連接supervisord主進程,路徑與unix_http_server部分的file一致赃蛛。
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; 使用HTTP方式連接supervisord主進程
;username=chris ; should be same as in [*_http_server] if set
;password=123 ; should be same as in [*_http_server] if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
; The sample program section below shows all possible program subsection values.
; Create one or more 'real' program: sections to be able to control them under
; supervisor.
; 應用程序配置項
# 被管理的進程的配置參數(shù)恃锉,theprogramname表示進程的名字。
;[program:theprogramname]
;command=/bin/cat ; 程序啟動命令的路徑
;process_name=%(program_name)s ; 用來表示supervisor進程啟動時的名字呕臂,是一個Python字符串表達式破托,默認為%(program_name)s。
;numprocs=1 ; Supervisor啟動此程序的多個實例歧蒋,如果大于1則process_name的表達式必須包含%(process_num)s土砂。
;directory=/tmp ; Supervisor在生成子進程時將切換到該目錄下
;umask=022 ; umask for process (default None)
;priority=999 ; 進程啟動優(yōu)先級,默認999谜洽,值越小越優(yōu)先啟動萝映。控制程序啟動和關閉的順序阐虚,越早啟動越晚關閉序臂。
;autostart=true ; 在supervisord主進程啟動時此程序自動啟動
;startsecs=1 ; 啟動1秒后沒有異常退出則表示進程正常運行
;startretries=3 ; 啟動失敗時自動重試次數(shù),默認為3次实束。
;autorestart=unexpected ; 程序退出后自動重啟奥秆,可選值為unexpected/true/false逊彭,unexpected表示進程意外殺死后才重啟。
;exitcodes=0 ; 自動重啟預設的退出返回碼吭练,默認為0诫龙。
;stopsignal=QUIT ; 當收到stop請求時發(fā)送信號給程序,默認為TERM鲫咽,可選值HUP/INT/QUIT/KILL/USR1/USR2
;stopwaitsecs=10 ; 操作系統(tǒng)給主進程發(fā)送SIGCHILD信號時等待的時長
;stopasgroup=false ; send stop signal to the UNIX process group (default false)
;killasgroup=false ; SIGKILL the UNIX process group (def false)
;user=chrism ; 若主進程以root身份運行則使用user設置啟動子程序的用戶
;redirect_stderr=true ; 將標準錯誤stderr重定向到標準輸出stdout签赃,默認為false。
;stdout_logfile=/a/path ; 標準輸出stdout日志文件保存路徑分尸,需提前創(chuàng)建好否則無法啟動锦聊。
;stdout_logfile_maxbytes=1MB ; 標準輸出stdout日志文件大小最大限制,默認1MB箩绍。
;stdout_logfile_backups=10 ; 標準輸出stdout日志文件備份數(shù)量孔庭,默認10個。
;stdout_capture_maxbytes=1MB ; 當進程處于stderr capture mode模式時寫入FIFO隊列的最大字節(jié)大小材蛛,單位可選KB/MB/GB
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;stderr_syslog=false ; send stderr to syslog with process name (default false)
;environment=A="1",B="2" ; process environment additions (def no adds)
;serverurl=AUTO ; 是否允許子進程和內(nèi)部HTTP服務通訊圆到,若設置為AUTO則會自動構造URL。
; The sample eventlistener section below shows all possible eventlistener
; subsection values. Create one or more 'real' eventlistener: sections to be
; able to handle event notifications sent by supervisord.
;[eventlistener:theeventlistenername]
;command=/bin/eventlistener ; the program (relative uses PATH, can take args)
;process_name=%(program_name)s ; process_name expr (default %(program_name)s)
;numprocs=1 ; number of processes copies to start (def 1)
;events=EVENT ; event notif. types to subscribe to (req'd)
;buffer_size=10 ; event buffer queue size (default 10)
;directory=/tmp ; directory to cwd to before exec (def no cwd)
;umask=022 ; umask for process (default None)
;priority=-1 ; the relative start priority (default -1)
;autostart=true ; start at supervisord start (default: true)
;startsecs=1 ; # of secs prog must stay up to be running (def. 1)
;startretries=3 ; max # of serial start failures when starting (default 3)
;autorestart=unexpected ; autorestart if exited after running (def: unexpected)
;exitcodes=0 ; 'expected' exit codes used with autorestart (default 0)
;stopsignal=QUIT ; signal used to kill process (default TERM)
;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false ; send stop signal to the UNIX process group (default false)
;killasgroup=false ; SIGKILL the UNIX process group (def false)
;user=chrism ; setuid to this UNIX account to run the program
;redirect_stderr=false ; redirect_stderr=true is not allowed for eventlisteners
;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stdout_logfile_backups=10 ; # of stdout logfile backups (0 means none, default 10)
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;stderr_syslog=false ; send stderr to syslog with process name (default false)
;environment=A="1",B="2" ; process environment additions
;serverurl=AUTO ; override serverurl computation (childutils)
; The sample group section below shows all possible group values. Create one
; or more 'real' group: sections to create "heterogeneous" process groups.
; 服務組管理
;[group:thegroupname]
;programs=progname1,progname2 ; 配置多個服務的名稱
;priority=999 ; 啟動優(yōu)先級卑吭,默認999芽淡。
; The [include] section can just contain the "files" setting. This
; setting can list multiple files (separated by whitespace or
; newlines). It can also contain wildcards. The filenames are
; interpreted as relative to this file. Included files *cannot*
; include files themselves.
; 包含配置文件
[include]
files = /etc/supervisor/etc/*.conf
查看是否監(jiān)聽9001端口
$ lsof -i:9001
應用程序配置
Supervisor的配置文件可分為兩部分,一部分為主進程supervisord
的配置豆赏,另一部分是應用程序的配置挣菲,應用程序的配置使用[include]
中的file
進行引入,需手工指定應用程序配置所在路徑與格式掷邦。
[include]
默認配置文件格式為*.ini
白胀,可根據(jù)個人習慣配置為*.conf
。
首先來看下應用程序配置項
;[program:theprogramname]
;command=/bin/cat ; 程序啟動命令的路徑
;process_name=%(program_name)s ; 用來表示supervisor進程啟動時的名字抚岗,是一個Python字符串表達式或杠,默認為%(program_name)s。
;numprocs=1 ; Supervisor啟動此程序的多個實例宣蔚,如果大于1則process_name的表達式必須包含%(process_num)s廷痘。
;directory=/tmp ; Supervisor在生成子進程時將切換到該目錄下
;umask=022 ; umask for process (default None)
;priority=999 ; 進程啟動優(yōu)先級,默認999件已,值越小越優(yōu)先啟動笋额。控制程序啟動和關閉的順序篷扩,越早啟動越晚關閉兄猩。
;autostart=true ; 在supervisord主進程啟動時此程序自動啟動
;startsecs=1 ; 啟動1秒后沒有異常退出則表示進程正常運行
;startretries=3 ; 啟動失敗時自動重試次數(shù),默認為3次。
;autorestart=unexpected ; 程序退出后自動重啟枢冤,可選值為unexpected/true/false鸠姨,unexpected表示進程意外殺死后才重啟。
;exitcodes=0 ; 自動重啟預設的退出返回碼淹真,默認為0讶迁。
;stopsignal=QUIT ; 當收到stop請求時發(fā)送信號給程序,默認為TERM核蘸,可選值HUP/INT/QUIT/KILL/USR1/USR2
;stopwaitsecs=10 ; 操作系統(tǒng)給主進程發(fā)送SIGCHILD信號時等待的時長
;stopasgroup=false ; send stop signal to the UNIX process group (default false)
;killasgroup=false ; SIGKILL the UNIX process group (def false)
;user=chrism ; 若主進程以root身份運行則使用user設置啟動子程序的用戶
;redirect_stderr=true ; 將標準錯誤stderr重定向到標準輸出stdout巍糯,默認為false。
;stdout_logfile=/a/path ; 標準輸出stdout日志文件保存路徑客扎,需提前創(chuàng)建好否則無法啟動祟峦。
;stdout_logfile_maxbytes=1MB ; 標準輸出stdout日志文件大小最大限制,默認1MB徙鱼。
;stdout_logfile_backups=10 ; 標準輸出stdout日志文件備份數(shù)量宅楞,默認10個。
;stdout_capture_maxbytes=1MB ; 當進程處于stderr capture mode模式時寫入FIFO隊列的最大字節(jié)大小袱吆,單位可選KB/MB/GB
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stdout_syslog=false ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (0 means none, default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;stderr_syslog=false ; send stderr to syslog with process name (default false)
;environment=A="1",B="2" ; process environment additions (def no adds)
;serverurl=AUTO ; 是否允許子進程和內(nèi)部HTTP服務通訊厌衙,若設置為AUTO則會自動構造URL。
應用程序配置文件格式使用[program:theprogramname]
標識绞绒,theprogramname
表示主進程管理的應用程序進程的描述婶希,會在客戶端supervisorctl
命令或Web界面中使用到,通過supervisorctl start/stop/restart/reload theprogramname
進行操作处铛。
典型的應用程序的配置
$ vim /etc/supervisor/etc/dismiss_worker.conf
[program:dismiss_worker]
command=php think queue:work --queue dismiss_job_queue --daemon --tries 10
directory=/home/wwwroot/yxkwx
process_name=%(process_num)02d
numprocs=5
autostart=true
autorestart=true
startsecs=1
startretries=20
redirect_stderr=true
user=root
stdout_logfile=/etc/supervisor/log/dismiss_worker.out.log
stderr_logfile=/etc/supervisor/log/dismiss_worker.err.log
其實饲趋,重點需要關注的配置項是command
和directory
兩個拐揭。
命令
supervisord
查看啟動過的supervisord
服務
$ ps aux|grep supervisord
root 1116 0.0 0.2 222828 16340 ? Ss May22 0:14 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
root 4001 0.0 0.1 222056 15292 ? Ss May22 0:20 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
root 11704 0.0 0.0 112716 988 pts/4 S+ 16:41 0:00 grep --color=auto supervisord
啟動主進程
# 指定主進程的配置文件后啟動Supervisor撤蟆,若不使用-c指定配置文件則會尋找默認配置文件。
$ supervisord -c /etc/supervisord.conf
設置主進程服務隨機啟動
$ systemctl start supervisord.service && systemctl enable supervisord.service
supervisorctl
$ supervisorctl -h
supervisorctl -- 在命令行中由supervisord運行的控件應用程序
用法: /usr/bin/supervisorctl [options] [action [arguments]]
選項:
-c/--configuration FILENAME -- 配置文件路徑堂污,若未給定則自動搜索家肯。
-h/--help -- 打印使用信息并退出
-i/--interactive -- 執(zhí)行命令后啟動交互式shell
-s/--serverurl URL -- 監(jiān)控服務器正在監(jiān)聽的URL,默認為 http://localhost:9001
-u/--username USERNAME -- 用于服務器身份驗證的用戶名
-p/--password PASSWORD -- 用于服務器身份驗證的密碼
-r/--history-file -- 保留readline歷史記錄盟猖,若readline可用讨衣。
選項 | 全稱 | 值 | 描述 |
---|---|---|---|
-c | --configuration | FILENAME | 設置配置文件路徑 |
-h | --help | 打印用法信息并退出 | |
-i | --interactive | 執(zhí)行命令后進入命令行交互模式 | |
-s | --serverurl | URL | 監(jiān)控服務器正在監(jiān)聽的URL |
-u | --username | USERNAME | 用于服務器身份驗證的用戶名 |
-p | --password | PASSWORD | 用于服務器身份驗證的密碼 |
-r | --history-file | 保留readline歷史記錄,若readline可用式镐。 |
supervisorctl
命令是supervisord
主進程的命令行客戶端工具反镇,啟動時需要指定與supervisord
相同的配置文件,否則會與supervisord
一樣按順序查找配置文件娘汞。使用supervisorctl
命令后會進入命令行模式歹茶。
$ supervisorctl -c /etc/supervisord.conf
supervisord
啟動成功后,可通過supervisorctl
客戶端控制進程的啟動、停止惊豺、重啟燎孟,若運行supervisorctl
命令不加參數(shù)則會進入supervisor
客戶端的交互模式,并會列出當前管理的所有進程尸昧。
查看所有任務的狀態(tài)
$ supervisorctl status
dismiss_worker:00 RUNNING pid 4005, uptime 1 day, 0:25:35
dismiss_worker:01 RUNNING pid 4006, uptime 1 day, 0:25:35
dismiss_worker:02 RUNNING pid 4003, uptime 1 day, 0:25:35
dismiss_worker:03 RUNNING pid 4004, uptime 1 day, 0:25:35
dismiss_worker:04 RUNNING pid 4007, uptime 1 day, 0:25:35
- 第一列:服務命
- 第二列:運行狀態(tài)揩页,
RUNNING
表示運行中FATAL
表示運行失敗STARTING
表示正在啟動STOPED
表示任務已停止 - 第三列:進程號
- 第四列:任務已經(jīng)運行的時間
若輸出信息為
unix:///tmp/supervisor.sock no such file
表示在tmp
目錄下不存在supervisor.sock
文件,原因是在tmp
臨時目錄中的文件會被系統(tǒng)定期自動清理掉烹俗,所以會顯示不存在爆侣。解決方式是在主配置文件supervisord.conf
中將tmp
目錄更換為/var/run/
目錄,這樣也就不會被Linux給自動清理掉了衷蜓。
$ sudo chmod 0777 /var/run
$ sudo chmod 0777 /var/log
$ touch /var/run/supervisor.sock
$ chmod 0777 /var/run/supervisor.sock
$ touch /var/log/supervisord.log
$ chmod 0777 /var/log/supervisord.log
$ vim /etc/supervisord.conf
[unix_http_server]
file=/var/run/supervisor.sock
[supervisord]
logfile=/var/log/supervisord.log
pidfile=/var/run/supervisord.pid
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock
$ supervisorctl update
error: <class 'socket.error'>, [Errno 111] Connection refused: file: /usr/lib64/python2.7/socket.py line: 224
$ supervisorctl status
unix:///var/run/supervisor.sock refused connection
重啟服務
$ ps aux | grep supervisord
root 1116 0.0 0.2 222828 16328 ? Ss May22 6:14 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
root 4001 0.0 0.1 222464 15704 ? Ss May22 9:01 /usr/bin/python /usr/bin/supervisord -c supervisord.conf
root 28185 0.0 0.0 112716 988 pts/0 S+ 10:17 0:00 grep --color=auto supervisord
$ kill -9 1116
$ kill -9 4001
$ cd /etc
$ supervisorctl shutdown
$ supervisord -c /etc/supervisord.conf
查看單個應用程序進程的運行狀態(tài)累提,注意這里的theprogramname
表示自定義配置的應用的名稱,例如上面的dismiss_worker
磁浇。
$ supervisorctl status theprogramname
$ supervisorctl status dismiss_worker
dismiss_worker: ERROR (no such process)
啟動應用程序進程
$ supervisorctl start theprogramname
停止應用程序進程
$ supervisorctl stop theprogramname
停止所有應用程序進程
$ supervisorctl stop all
重啟應用程序進程
$ supervisorctl restart theprogramname
命令 | 描述 |
---|---|
supervisorctl restart <name> | 重啟名為name的進程 |
supervisorctl restart <gname>:* | 重啟組名為gname中的所有進程 |
supervisorctl restart <name> <name> | 重啟多個進程或多個組 |
supervisorctl restart all | 重啟所有進程 |
加載最新配置文件并停止原有進程并按最新配置啟動和管理所有進程斋陪,相當于重啟所有服務,慎用置吓。
$ supervisorctl reload
根據(jù)最新配置文件啟動最新配置或有改動的進程
$ supervisorctl update
error: <class 'socket.error'>, [Errno 111] Connection refused: file: /usr/lib64/python2.7/socket.py line: 224
$ supervisorctl status
unix:///var/run/supervisor.sock refused connection
關閉主進程
$ supervisorctl shutdown
清空某應用程序進程的進程日志
$ systemctl clear theprogramname
查看日志
根據(jù)supervisord.conf
主進程配置文件中設置的日志文件位置默認為/tmp/supervisord.log
進行查看
$ tail -f /tmp/supervisord.log
問題
$ supervisorctl status
error: <class 'socket.error'>, [Errno 113] No route to host: file: /usr/lib64/python2.7/socket.py line: 571
錯誤原因:服務端的防火墻設置了過濾規(guī)則
$ supervisord -c supervisord.conf
Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.
For help, use /usr/bin/supervisord -h
錯誤原因:
unix:///var/run/supervisor/supervisor.sock no such file
問題描述:安裝好supervisor沒有開啟服務直接使用supervisorctl報的錯
解決方案:supervisord -c /etc/supervisord.con
未完待續(xù)...