supervisor用法

1. 什么是supervisor

supervisor是一個(gè)Linux/Unix系統(tǒng)上的進(jìn)程監(jiān)控工具,supervisor是一個(gè)Python開發(fā)的通用的進(jìn)程管理程序葫笼,可以管理和監(jiān)控Linux上面的進(jìn)程深啤,能將一個(gè)普通的命令行進(jìn)程變?yōu)楹笈_(tái)daemon,并監(jiān)控進(jìn)程狀態(tài)路星,異常退出時(shí)能自動(dòng)重啟溯街。不過同daemontools一樣,它不能監(jiān)控daemon進(jìn)程

supervisor官網(wǎng)點(diǎn)此洋丐。

2. 為什么用supervisor

  • 使用簡(jiǎn)單
    supervisor提供了一種統(tǒng)一的方式來start苫幢、stop、monitor你的進(jìn)程垫挨, 進(jìn)程可以單獨(dú)控制韩肝,也可以成組的控制。你可以在本地或者遠(yuǎn)程命令行或者web接口來配置Supervisor九榔。
    在linux下的很多程序通常都是一直運(yùn)行著的哀峻,一般來說都需要自己編寫一個(gè)能夠?qū)崿F(xiàn)進(jìn)程start/stop/restart/reload功能的腳本涡相,然后放到/etc/init.d/下面。但這樣做也有很多弊端剩蟀,第一我們要為每個(gè)程序編寫一個(gè)類似腳本催蝗,第二,當(dāng)這個(gè)進(jìn)程掛掉的時(shí)候育特,linux不會(huì)自動(dòng)重啟它的丙号,想要自動(dòng)重啟的話,我們還要自己寫一個(gè)監(jiān)控重啟腳本缰冤。
    而supervisor則可以完美的解決這些問題犬缨。supervisor管理進(jìn)程,就是通過fork/exec的方式把這些被管理的進(jìn)程棉浸,當(dāng)作supervisor的子進(jìn)程來啟動(dòng)怀薛。這樣的話,我們只要在supervisor的配置文件中迷郑,把要管理的進(jìn)程的可執(zhí)行文件的路徑寫進(jìn)去就OK了枝恋。第二,被管理進(jìn)程作為supervisor的子進(jìn)程嗡害,當(dāng)子進(jìn)程掛掉的時(shí)候焚碌,父進(jìn)程可以準(zhǔn)確獲取子進(jìn)程掛掉的信息的,所以當(dāng)然也就可以對(duì)掛掉的子進(jìn)程進(jìn)行自動(dòng)重啟霸妹,當(dāng)然重啟還是不重啟呐能,也要看你的配置文件里面有木有設(shè)置autostart=true了。
    supervisor通過INI格式配置文件進(jìn)行配置抑堡,很容易掌握摆出,它為每個(gè)進(jìn)程提供了很多配置選項(xiàng),可以使你很容易的重啟進(jìn)程或者自動(dòng)的輪轉(zhuǎn)日志首妖。
  • 集中管理
    supervisor管理的進(jìn)程偎漫,進(jìn)程組信息,全部都寫在一個(gè)ini格式的文件里就OK了有缆。而且象踊,我們管理supervisor的時(shí)候的可以在本地進(jìn)行管理,也可以遠(yuǎn)程管理棚壁,而且supervisor提供了一個(gè)web界面杯矩,我們可以在web界面上監(jiān)控,管理進(jìn)程袖外。 當(dāng)然了史隆,本地,遠(yuǎn)程和web管理的時(shí)候曼验,需要調(diào)用supervisor的xml_rpc接口泌射,這個(gè)也是后話粘姜。
    supervisor可以對(duì)進(jìn)程組統(tǒng)一管理,也就是說咱們可以把需要管理的進(jìn)程寫到一個(gè)組里面熔酷,然后我們把這個(gè)組作為一個(gè)對(duì)象進(jìn)行管理孤紧,如啟動(dòng),停止拒秘,重啟等等操作号显。而linux系統(tǒng)則是沒有這種功能的,我們想要停止一個(gè)進(jìn)程躺酒,只能一個(gè)一個(gè)的去停止押蚤,要么就自己寫個(gè)腳本去批量停止。

3. supervisor組件

  • supervisord
    主進(jìn)程,負(fù)責(zé)管理進(jìn)程的server阴颖,它會(huì)根據(jù)配置文件創(chuàng)建指定數(shù)量的應(yīng)用程序的子進(jìn)程,管理子進(jìn)程的整個(gè)生命周期丐膝,對(duì)crash的進(jìn)程重啟量愧,對(duì)進(jìn)程變化發(fā)送事件通知等。同時(shí)內(nèi)置web server和XML-RPC Interface帅矗,輕松實(shí)現(xiàn)進(jìn)程管理偎肃。。該服務(wù)的配置文件在/etc/supervisor/supervisord.conf浑此。
  • supervisorctl
    客戶端的命令行工具累颂,提供一個(gè)類似shell的操作接口,通過它你可以連接到不同的supervisord進(jìn)程上來管理它們各自的子程序凛俱,命令通過UNIX socket或者TCP來和服務(wù)通訊紊馏。用戶通過命令行發(fā)送消息給supervisord,可以查看進(jìn)程狀態(tài)蒲犬,加載配置文件朱监,啟停進(jìn)程,查看進(jìn)程標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出原叮,遠(yuǎn)程操作等赫编。服務(wù)端也可以要求客戶端提供身份驗(yàn)證之后才能進(jìn)行操作。
  • Web Server
    supervisor提供了web server功能,可通過web控制進(jìn)程(需要設(shè)置[inethttpserver]配置項(xiàng))。
  • XML-RPC Interface
    XML-RPC接口八堡, 就像HTTP提供WEB UI一樣玄叠,用來控制supervisor和由它運(yùn)行的程序。

4. 安裝差凹、配置、使用

supervisor是python編寫的,可以用easy_install躺苦、pip都可以安裝身腻,比如在我的centos機(jī)器下,安裝命令如下:

yum install python-setuptools
easy_install pip
pip install superviso

在這里我使用pip安裝之后匹厘,在創(chuàng)建配置文件的時(shí)候出錯(cuò)嘀趟,所以我又選擇了使用easy_install supervisor的安裝方法

當(dāng)然也可以下載源碼進(jìn)行安裝,比如:

wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz --no-check-certificat

tar -zxvf supervisor-3.1.3.tar.gz
cd supervisor-3.1.3
sudo python setup.py install

安裝之后可以直接supervisord運(yùn)行驗(yàn)證是否成功愈诚,如果報(bào)錯(cuò)她按,再逐一解決,比如可能會(huì)報(bào)meld3版本問題炕柔,這里給出安裝步驟:

wget http://effbot.org/media/downloads/elementtree-1.2.7-20070827-preview.zip
unzip elementtree-1.2.7-20070827-preview.zip  &&  cd elementtree-1.2.7-20070827-preview
python setup.py install

或者下載此版本:

wget http://www.plope.com/software/meld3/meld3-0.6.5.tar.gz
tar -xf meld3-0.6.5.tar.gz && cd meld3-0.6.5
python setup.py install

如果安裝成功就可以進(jìn)行下一步了:設(shè)置配置文件酌泰。

### 生成配置文件,且放在/etc目錄下
echo_supervisord_conf > /etc/supervisord.conf  

###為了不將所有新增配置信息全寫在一個(gè)配置文件里匕累,這里新建一個(gè)文件夾陵刹,每個(gè)程序設(shè)置一個(gè)配置文件,相互隔離
mkdir /etc/supervisord.d/  

### 修改配置文件
vim /etc/supervisord.conf

### 加入以下配置信息
[include]
files = /etc/supervisord.d/*.conf

### 在supervisord.conf中設(shè)置通過web可以查看管理的進(jìn)程欢嘿,加入以下代碼(默認(rèn)即有衰琐,取消注釋即可)    
[inet_http_server] 
port=9001
username=user      
password=123

啟動(dòng)supervisord

 # supervisord -c /etc/supervisord.conf

查看一下是否監(jiān)聽

 # lsof -i:9001
 COMMAND     PID USER   FD   TYPE   DEVICE SIZE/OFF NODE NAME
 superviso 14685 root    4u  IPv4 20155719      0t0  TCP *:etlservicemgr (LISTEN)

現(xiàn)在通過 http://ip:9001/ 就可以查看supervisor的web界面了(默認(rèn)用戶名及密碼是user和123),當(dāng)然目前還沒有加入任何監(jiān)控的程序炼蹦。

image.png

下面寫一個(gè)簡(jiǎn)單的python腳本羡宙,用來驗(yàn)證supervisor的監(jiān)控效果。

#cat /root/temp/test_http.py   ###以下即是test_http.py腳本中的代碼
#!/usr/bin/env python
# coding=utf-8
import sys  
import BaseHTTPServer  
from SimpleHTTPServer import SimpleHTTPRequestHandler  
HandlerClass = SimpleHTTPRequestHandler  
ServerClass = BaseHTTPServer.HTTPServer  
Protocol = "HTTP/1.0"  

if __name__ == "__main__":
    if sys.argv[1:]:  
        port = int(sys.argv[1])  
    else:  
        port = 10000  

    server_address = ('0.0.0.0', port)  
    HandlerClass.protocol_version = Protocol  
    httpd = ServerClass(server_address, HandlerClass)  

    sa = httpd.socket.getsockname()  
    print "Serving HTTP on", sa[0], "port", sa[1], "..."  
    httpd.serve_forever()

增加一個(gè)配置文件掐隐,以便supervisor用來監(jiān)控test_http.py程序狗热。

#cat /etc/supervisord.d/supervisor_test_http.conf  ### 以下即為配置文件中的內(nèi)容
[program:test_http]
command=python /root/temp/test_http.py 9999    ; 被監(jiān)控的進(jìn)程路徑
directory=/root/temp                ; 執(zhí)行前要不要先cd到目錄去,一般不用
priority=1                    ;數(shù)字越高虑省,優(yōu)先級(jí)越高
numprocs=1                    ; 啟動(dòng)幾個(gè)進(jìn)程
autostart=true                ; 隨著supervisord的啟動(dòng)而啟動(dòng)
autorestart=true              ; 自動(dòng)重啟匿刮。。當(dāng)然要選上了
startretries=10               ; 啟動(dòng)失敗時(shí)的最多重試次數(shù)
exitcodes=0                   ; 正常退出代碼(是說退出代碼是這個(gè)時(shí)就不再重啟了嗎探颈?待確定)
stopsignal=KILL               ; 用來殺死進(jìn)程的信號(hào)
stopwaitsecs=10               ; 發(fā)送SIGKILL前的等待時(shí)間
redirect_stderr=true          ; 重定向stderr到stdout

重新啟動(dòng)supervisord僻焚,或者重新加載配置文件:

supervisorctl reload
### 或者
supervisorctl -c /etc/supervisord.conf

此時(shí)再訪問http頁面,就會(huì)發(fā)現(xiàn)test_http.py程序已經(jīng)被監(jiān)控了膝擂,且已經(jīng)自動(dòng)啟動(dòng)了虑啤。

image.png

此時(shí)也可以訪問test_http.py程序提供的http服務(wù)了,比如http://ip:9999架馋。

注意:supervisor只能監(jiān)控前臺(tái)程序狞山, 如果你的程序是通過fork方式實(shí)現(xiàn)的daemon服務(wù),則不能用它監(jiān)控叉寂,否則supervisor> status 會(huì)提示:BACKOFF Exited too quickly (process log may have details)萍启。 因此像apache、tomcat服務(wù)默認(rèn)啟動(dòng)都是按daemon方式啟動(dòng)的,則不能通過supervisor直接運(yùn)行啟動(dòng)腳本(service httpd start)勘纯,相反要通過一個(gè)包裝過的啟停腳本來完成局服,比如tomcat在supervisor下的啟停腳本請(qǐng)參考:Controlling tomcat with supervisor或者supervisor-tomcat.conf

另外驳遵,可以將supervisor隨系統(tǒng)啟動(dòng)而啟動(dòng)淫奔,Linux 在啟動(dòng)的時(shí)候會(huì)執(zhí)行 /etc/rc.local 里面的腳本,所以只要在這里添加執(zhí)行命令即可:

# 如果是 Ubuntu 添加以下內(nèi)容(這里要寫全路徑堤结,因?yàn)榇藭r(shí)PATH的環(huán)境變量未必設(shè)置)
/usr/local/bin/supervisord -c /etc/supervisord.conf

# 如果是 Centos 添加以下內(nèi)容
/usr/bin/supervisord -c /etc/supervisord.conf

6. supervisor管理

supervisor的管理可以用命令行工具(supervisorctl)或者web界面管理唆迁,如果一步步按上面步驟操作,那么web管理就可以正常使用了竞穷,這里單獨(dú)介紹下supervisorctl命令工具:

### 查看supervisorctl支持的命令
# supervisorctl help    
default commands (type help <topic>):
=====================================
add    exit      open  reload  restart   start   tail   
avail  fg        pid   remove  shutdown  status  update 
clear  maintail  quit  reread  signal    stop    version

### 查看當(dāng)前運(yùn)行的進(jìn)程列表
# supervisorctl status
test_http                        RUNNING   pid 28087, uptime 0:05:17

其中

  • update 更新新的配置到supervisord(不會(huì)重啟原來已運(yùn)行的程序)
  • reload唐责,載入所有配置文件,并按新的配置啟動(dòng)瘾带、管理所有進(jìn)程(會(huì)重啟原來已運(yùn)行的程序)
  • start xxx: 啟動(dòng)某個(gè)進(jìn)程
  • restart xxx: 重啟某個(gè)進(jìn)程
  • stop xxx: 停止某一個(gè)進(jìn)程(xxx)鼠哥,xxx為[program:theprogramname]里配置的值
  • stop groupworker: 重啟所有屬于名為groupworker這個(gè)分組的進(jìn)程(start,restart同理)
  • stop all,停止全部進(jìn)程看政,注:start朴恳、restart、stop都不會(huì)載入最新的配置文
  • reread帽衙,當(dāng)一個(gè)服務(wù)由自動(dòng)啟動(dòng)修改為手動(dòng)啟動(dòng)時(shí)執(zhí)行一下就ok

注意:如果原來的程序啟動(dòng)時(shí)需要帶上參數(shù)菜皂,那通過supervisorctl start時(shí)應(yīng)該先寫一個(gè)shell腳本贞绵,然后supervisorctl運(yùn)行該腳本即可厉萝。

7. supervisor配置參數(shù)介紹

supervisord的配置文件主要由幾個(gè)配置段構(gòu)成,配置項(xiàng)以K/V格式呈現(xiàn)榨崩。

  • unixhttpserver配置塊

在該配置塊的參數(shù)項(xiàng)表示的是一個(gè)監(jiān)聽在socket上的HTTP server谴垫,如果[unixhttpserver]塊不在配置文件中或被注釋,則不會(huì)啟動(dòng)基于socket的HTTP server母蛛。該塊的參數(shù)介紹如下:

- file:一個(gè)unix domain socket的文件路徑翩剪,HTTP/XML-RPC會(huì)監(jiān)聽在這上面
- chmod:在啟動(dòng)時(shí)修改unix domain socket的mode
- chown:修改socket文件的屬主
- username:HTTP server在認(rèn)證時(shí)的用戶名
- password:認(rèn)證密碼
  • inethttpserver配置塊

在該配置塊的參數(shù)項(xiàng)表示的是一個(gè)監(jiān)聽在TCP上的HTTP server,如果[inethttpserver]塊不在配置文件中或被注釋彩郊,則不會(huì)啟動(dòng)基于TCP的HTTP server前弯。該塊的參數(shù)介紹如下:

- port:TCP監(jiān)聽的地址和端口(ip:port),這個(gè)地址會(huì)被HTTP/XML-RPC監(jiān)聽
- username:HTTP server在認(rèn)證時(shí)的用戶名
- password:認(rèn)證密碼

比如:

 [inet_http_server]         ; inet (TCP) server disabled by default
 port=0.0.0.0:9001          ; (ip_address:port specifier, *:port for all iface)
 username=user              ; (default is no username (open server))
 password=123               ; (default is no password (open server))

表示監(jiān)聽在9001端口秫逝,需要使用用戶名+密碼的方式訪問恕出,訪問地址是:http//127.0.0.1:9001。

  • supervisord配置塊

該配置塊的參數(shù)項(xiàng)是關(guān)于supervisord進(jìn)程的全局配置項(xiàng)违帆。該塊的參數(shù)介紹如下:

- logfile:log文件路徑
- logfile_maxbytes:log文件達(dá)到多少后自動(dòng)進(jìn)行輪轉(zhuǎn)浙巫,單位是KB、MB、GB的畴。如果設(shè)置為0則表示不限制日志文件大小
- logfile_backups:輪轉(zhuǎn)日志備份的數(shù)量渊抄,默認(rèn)是10,如果設(shè)置為0丧裁,則不備份
- loglevel:error护桦、warn、info渣慕、debug嘶炭、trace、blather逊桦、critical
- pidfile:pid文件路徑
- umask:umask值眨猎,默認(rèn)022
- nodaemon:如果設(shè)置為true,則supervisord在前臺(tái)啟動(dòng)强经,而不是以守護(hù)進(jìn)程啟動(dòng)
- minfds:supervisord在成功啟動(dòng)前可用的最小文件描述符數(shù)量睡陪,默認(rèn)1024
- minprocs:supervisord在成功啟動(dòng)前可用的最小進(jìn)程描述符數(shù)量,默認(rèn)200
- nocleanup:防止supervisord在啟動(dòng)的時(shí)候清除已經(jīng)存在的子進(jìn)程日志文件
- childlogdir:自動(dòng)啟動(dòng)的子進(jìn)程的日志目錄
- user:supervisord的運(yùn)行用戶
- directory:supervisord以守護(hù)進(jìn)程運(yùn)行的時(shí)候切換到這個(gè)目錄
- strip_ansi:消除子進(jìn)程日志文件中的轉(zhuǎn)義序列
- environment:一個(gè)k/v對(duì)的list列表

該塊的參數(shù)通常不需要改動(dòng)就可以使用匿情,當(dāng)然也可以按需修改兰迫。

  • program配置塊

該塊就是我們要監(jiān)控的程序的配置項(xiàng)。該配置塊的頭部是有固定格式的炬称,一個(gè)關(guān)鍵字program汁果,后面跟著一個(gè)冒號(hào),接下來才是程序名玲躯。例如:[program:foo]据德,foo就是程序名,在使用supervisorctl來操作程序的時(shí)候跷车,就是以foo來標(biāo)明的棘利。該塊的參數(shù)介紹如下:

- command:?jiǎn)?dòng)程序使用的命令,可以是絕對(duì)路徑或者相對(duì)路徑
- process_name:一個(gè)python字符串表達(dá)式朽缴,用來表示supervisor進(jìn)程啟動(dòng)的這個(gè)的名稱善玫,默認(rèn)值是%(program_name)s
- numprocs:Supervisor啟動(dòng)這個(gè)程序的多個(gè)實(shí)例,如果numprocs>1密强,則process_name的表達(dá)式必須包含%(process_num)s茅郎,默認(rèn)是1
- numprocs_start:一個(gè)int偏移值,當(dāng)啟動(dòng)實(shí)例的時(shí)候用來計(jì)算numprocs的值
- priority:權(quán)重或渤,可以控制程序啟動(dòng)和關(guān)閉時(shí)的順序系冗,權(quán)重越低:越早啟動(dòng),越晚關(guān)閉劳坑。默認(rèn)值是999
- autostart:如果設(shè)置為true毕谴,當(dāng)supervisord啟動(dòng)的時(shí)候,進(jìn)程會(huì)自動(dòng)重啟。
- autorestart:值可以是false涝开、true循帐、unexpected。false:進(jìn)程不會(huì)自動(dòng)重啟舀武,unexpected:當(dāng)程序退出時(shí)的退出碼不是exitcodes中定義的時(shí)拄养,進(jìn)程會(huì)重啟,true:進(jìn)程會(huì)無條件重啟當(dāng)退出的時(shí)候银舱。
- startsecs:程序啟動(dòng)后等待多長(zhǎng)時(shí)間后才認(rèn)為程序啟動(dòng)成功
- startretries:supervisord嘗試啟動(dòng)一個(gè)程序時(shí)嘗試的次數(shù)瘪匿。默認(rèn)是3
- exitcodes:一個(gè)預(yù)期的退出返回碼,默認(rèn)是0,2寻馏。
- stopsignal:當(dāng)收到stop請(qǐng)求的時(shí)候棋弥,發(fā)送信號(hào)給程序,默認(rèn)是TERM信號(hào)诚欠,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2顽染。
- stopwaitsecs:在操作系統(tǒng)給supervisord發(fā)送SIGCHILD信號(hào)時(shí)等待的時(shí)間
- stopasgroup:如果設(shè)置為true,則會(huì)使supervisor發(fā)送停止信號(hào)到整個(gè)進(jìn)程組
- killasgroup:如果設(shè)置為true轰绵,則在給程序發(fā)送SIGKILL信號(hào)的時(shí)候粉寞,會(huì)發(fā)送到整個(gè)進(jìn)程組,它的子進(jìn)程也會(huì)受到影響左腔。
- user:如果supervisord以root運(yùn)行唧垦,則會(huì)使用這個(gè)設(shè)置用戶啟動(dòng)子程序
- redirect_stderr:如果設(shè)置為true,進(jìn)程則會(huì)把標(biāo)準(zhǔn)錯(cuò)誤輸出到supervisord后臺(tái)的標(biāo)準(zhǔn)輸出文件描述符液样。
- stdout_logfile:把進(jìn)程的標(biāo)準(zhǔn)輸出寫入文件中振亮,如果stdout_logfile沒有設(shè)置或者設(shè)置為AUTO,則supervisor會(huì)自動(dòng)選擇一個(gè)文件位置蓄愁。
- stdout_logfile_maxbytes:標(biāo)準(zhǔn)輸出log文件達(dá)到多少后自動(dòng)進(jìn)行輪轉(zhuǎn)双炕,單位是KB狞悲、MB撮抓、GB。如果設(shè)置為0則表示不限制日志文件大小
- stdout_logfile_backups:標(biāo)準(zhǔn)輸出日志輪轉(zhuǎn)備份的數(shù)量摇锋,默認(rèn)是10丹拯,如果設(shè)置為0,則不備份
- stdout_capture_maxbytes:當(dāng)進(jìn)程處于stderr capture mode模式的時(shí)候荸恕,寫入FIFO隊(duì)列的最大bytes值乖酬,單位可以是KB、MB融求、GB
- stdout_events_enabled:如果設(shè)置為true咬像,當(dāng)進(jìn)程在寫它的stderr到文件描述符的時(shí)候,PROCESS_LOG_STDERR事件會(huì)被觸發(fā)
- stderr_logfile:把進(jìn)程的錯(cuò)誤日志輸出一個(gè)文件中,除非redirect_stderr參數(shù)被設(shè)置為true
- stderr_logfile_maxbytes:錯(cuò)誤log文件達(dá)到多少后自動(dòng)進(jìn)行輪轉(zhuǎn)县昂,單位是KB肮柜、MB、GB倒彰。如果設(shè)置為0則表示不限制日志文件大小
- stderr_logfile_backups:錯(cuò)誤日志輪轉(zhuǎn)備份的數(shù)量审洞,默認(rèn)是10,如果設(shè)置為0待讳,則不備份
- stderr_capture_maxbytes:當(dāng)進(jìn)程處于stderr capture mode模式的時(shí)候芒澜,寫入FIFO隊(duì)列的最大bytes值,單位可以是KB创淡、MB痴晦、GB
- stderr_events_enabled:如果設(shè)置為true,當(dāng)進(jìn)程在寫它的stderr到文件描述符的時(shí)候琳彩,PROCESS_LOG_STDERR事件會(huì)被觸發(fā)
- environment:一個(gè)k/v對(duì)的list列表
- directory:supervisord在生成子進(jìn)程的時(shí)候會(huì)切換到該目錄
- umask:設(shè)置進(jìn)程的umask
- serverurl:是否允許子進(jìn)程和內(nèi)部的HTTP服務(wù)通訊阅酪,如果設(shè)置為AUTO,supervisor會(huì)自動(dòng)的構(gòu)造一個(gè)url

比如下面這個(gè)選項(xiàng)塊就表示監(jiān)控一個(gè)名叫test_http的程序:

[program:test_http]
command=python test_http.py 10000  ; 被監(jiān)控的進(jìn)程啟動(dòng)命令
directory=/root/                ; 執(zhí)行前要不要先cd到目錄去汁针,一般不用
priority=1                    ;數(shù)字越高术辐,優(yōu)先級(jí)越高
numprocs=1                    ; 啟動(dòng)幾個(gè)進(jìn)程
autostart=true                ; 隨著supervisord的啟動(dòng)而啟動(dòng)
autorestart=true              ; 自動(dòng)重啟。施无。當(dāng)然要選上了
startretries=10               ; 啟動(dòng)失敗時(shí)的最多重試次數(shù)
exitcodes=0                   ; 正常退出代碼(是說退出代碼是這個(gè)時(shí)就不再重啟了嗎辉词?待確定)
stopsignal=KILL               ; 用來殺死進(jìn)程的信號(hào)
stopwaitsecs=10               ; 發(fā)送SIGKILL前的等待時(shí)間
redirect_stderr=true          ; 重定向stderr到stdout

8. 集群管理

supervisor不支持跨機(jī)器的進(jìn)程監(jiān)控,一個(gè)supervisord只能監(jiān)控本機(jī)上的程序猾骡,大大限制了supervisor的使用瑞躺。

不過由于supervisor本身支持xml-rpc,因此也有一些基于supervisor二次開發(fā)的多機(jī)器進(jìn)程管理工具兴想。比如:

  • Django-Dashvisor
    Web-based dashboard written in Python. Requires Django 1.3 or 1.4.
  • Nodervisor
    Web-based dashboard written in Node.js.
  • Supervisord-Monitor
    Web-based dashboard written in PHP.
  • SupervisorUI
    Another Web-based dashboard written in PHP.
  • cesi
    cesi is a web interface provides manage supervizors from same interface.

以上那么多幢哨,我都不會(huì),一個(gè)個(gè)試起來也很麻煩嫂便,搞不定捞镰,除了最后一個(gè)cesi,還好懂點(diǎn)pyhon毙替,勉強(qiáng)安裝成功了岸售。

cesi具體安裝說明請(qǐng)直接參考原Readme。這里只做一點(diǎn)說明:

git clone https://github.com/Gamegos/cesi
cd cesi && mkdir pack
python setup.py build
python setup.py install
sqlite3 /自己的路徑path/userinfo.db < userinfo.sql
cp cesi.conf /etc/cesi.conf  ### 自行修改cesi.conf內(nèi)容厂画,kv對(duì)凸丸,很簡(jiǎn)單
cd cesi && python web.py     ### 即可啟動(dòng)成功

cesi.conf配置文件的設(shè)置:

[node:local]                            ### 設(shè)置監(jiān)控的各個(gè)機(jī)器
username = user
password = 123
host = 192.168.14.8
port = 9001

;[node:<node_name2>]                    ### 如果有多臺(tái)機(jī)器,就依次添加
;username = <username>
;password = <password>
;host = <hostname>
;port = <port>

;[environment:<environment_name>]
;members = <node_name>, <node_name2>

[cesi]
database = /root/temp/cesi/userinfo.db    ### 設(shè)置db路徑
activity_log = /root/temp/cesi/cesi.log   ### 設(shè)置log路徑
host = 0.0.0.0

一切順利的話袱院,可通過頁面http://ip:5000屎慢,用戶名瞭稼,密碼都是admin,最終的效果如下所示:

image.png

cesi repo上的示例效果:


image.png

記錄下用法學(xué)習(xí)使用腻惠。

轉(zhuǎn)載自:https://www.cnblogs.com/smail-bao/p/5673434.html

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末弛姜,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子妖枚,更是在濱河造成了極大的恐慌廷臼,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,602評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件绝页,死亡現(xiàn)場(chǎng)離奇詭異荠商,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)续誉,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,442評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門莱没,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人酷鸦,你說我怎么就攤上這事饰躲。” “怎么了臼隔?”我有些...
    開封第一講書人閱讀 152,878評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵嘹裂,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我摔握,道長(zhǎng)寄狼,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,306評(píng)論 1 279
  • 正文 為了忘掉前任氨淌,我火速辦了婚禮泊愧,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘盛正。我一直安慰自己删咱,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,330評(píng)論 5 373
  • 文/花漫 我一把揭開白布豪筝。 她就那樣靜靜地躺著痰滋,像睡著了一般。 火紅的嫁衣襯著肌膚如雪壤蚜。 梳的紋絲不亂的頭發(fā)上即寡,一...
    開封第一講書人閱讀 49,071評(píng)論 1 285
  • 那天徊哑,我揣著相機(jī)與錄音袜刷,去河邊找鬼。 笑死莺丑,一個(gè)胖子當(dāng)著我的面吹牛著蟹,可吹牛的內(nèi)容都是我干的墩蔓。 我是一名探鬼主播,決...
    沈念sama閱讀 38,382評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼萧豆,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼奸披!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起涮雷,我...
    開封第一講書人閱讀 37,006評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤阵面,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后洪鸭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體样刷,經(jīng)...
    沈念sama閱讀 43,512評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,965評(píng)論 2 325
  • 正文 我和宋清朗相戀三年览爵,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了置鼻。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,094評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜓竹,死狀恐怖箕母,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情俱济,我是刑警寧澤嘶是,帶...
    沈念sama閱讀 33,732評(píng)論 4 323
  • 正文 年R本政府宣布,位于F島的核電站蛛碌,受9級(jí)特大地震影響俊啼,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜左医,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,283評(píng)論 3 307
  • 文/蒙蒙 一授帕、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧浮梢,春花似錦跛十、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,286評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至远豺,卻和暖如春奈偏,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背躯护。 一陣腳步聲響...
    開封第一講書人閱讀 31,512評(píng)論 1 262
  • 我被黑心中介騙來泰國(guó)打工惊来, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人棺滞。 一個(gè)月前我還...
    沈念sama閱讀 45,536評(píng)論 2 354
  • 正文 我出身青樓裁蚁,卻偏偏與公主長(zhǎng)得像矢渊,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子枉证,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,828評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容