Supervisor

Supervisor

參考資料

Supervisor是什么?

A Process Control System

Supervisor是使用Python開發(fā)的一套通用的進程管理程序萌踱,能將一個普通的命令行進程轉變?yōu)楹笈_守護進程daemon屡拨,并監(jiān)控進程狀態(tài)鸽扁,當異常退出時能自動重啟蚊夫。

Supervisor通過forkexec的方式將被管理的進程當作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烁兰、stopmonitor進程徊都,進程可以單獨控制也可以成組控制沪斟,可以在本地或遠程的命令行或Web接口中配置Supervisor。

在Linux中很多程序都是一直運行著的暇矫,一般來說都需要自己編寫一個能夠實現(xiàn)進程start/stop/restart/reload的腳本主之,然后放到/etc/init.d/文件夾下。這種做法的弊端是需要為每個程序都編寫一個類似的腳本李根,其次當這個進程掛掉的時候槽奕,Linux并不會自動重啟它,想要自動自動重啟的話房轿,還需要自己編寫一個監(jiān)控從重啟的腳本粤攒。

使用Supervisor可以完美的解決這些問題,Supervisor管理進程是通過forkexec的方式將被管理的進程作為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

其實饲趋,重點需要關注的配置項是commanddirectory兩個拐揭。

命令

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ù)...

最后編輯于
?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末无虚,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子衍锚,更是在濱河造成了極大的恐慌友题,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,378評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件戴质,死亡現(xiàn)場離奇詭異度宦,居然都是意外死亡,警方通過查閱死者的電腦和手機告匠,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,356評論 2 382
  • 文/潘曉璐 我一進店門戈抄,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人后专,你說我怎么就攤上這事划鸽。” “怎么了戚哎?”我有些...
    開封第一講書人閱讀 152,702評論 0 342
  • 文/不壞的土叔 我叫張陵裸诽,是天一觀的道長。 經(jīng)常有香客問我型凳,道長丈冬,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,259評論 1 279
  • 正文 為了忘掉前任甘畅,我火速辦了婚禮埂蕊,結果婚禮上实夹,老公的妹妹穿的比我還像新娘。我一直安慰自己粒梦,他們只是感情好亮航,可當我...
    茶點故事閱讀 64,263評論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著匀们,像睡著了一般缴淋。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上泄朴,一...
    開封第一講書人閱讀 49,036評論 1 285
  • 那天重抖,我揣著相機與錄音,去河邊找鬼祖灰。 笑死钟沛,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的局扶。 我是一名探鬼主播恨统,決...
    沈念sama閱讀 38,349評論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼三妈!你這毒婦竟也來了畜埋?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 36,979評論 0 259
  • 序言:老撾萬榮一對情侶失蹤畴蒲,失蹤者是張志新(化名)和其女友劉穎悠鞍,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體模燥,經(jīng)...
    沈念sama閱讀 43,469評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡咖祭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,938評論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了蔫骂。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片么翰。...
    茶點故事閱讀 38,059評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖纠吴,靈堂內(nèi)的尸體忽然破棺而出硬鞍,到底是詐尸還是另有隱情慧瘤,我是刑警寧澤戴已,帶...
    沈念sama閱讀 33,703評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站锅减,受9級特大地震影響糖儡,放射性物質發(fā)生泄漏。R本人自食惡果不足惜怔匣,卻給世界環(huán)境...
    茶點故事閱讀 39,257評論 3 307
  • 文/蒙蒙 一握联、第九天 我趴在偏房一處隱蔽的房頂上張望桦沉。 院中可真熱鬧,春花似錦金闽、人聲如沸纯露。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,262評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽埠褪。三九已至,卻和暖如春挤庇,著一層夾襖步出監(jiān)牢的瞬間钞速,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,485評論 1 262
  • 我被黑心中介騙來泰國打工嫡秕, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留渴语,地道東北人。 一個月前我還...
    沈念sama閱讀 45,501評論 2 354
  • 正文 我出身青樓昆咽,卻偏偏與公主長得像驾凶,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子掷酗,可洞房花燭夜當晚...
    茶點故事閱讀 42,792評論 2 345