新聞中心
Supervisor是用Python開(kāi)發(fā)的一套通用的進(jìn)程管理程序,能將一個(gè)普通的命令行進(jìn)程變?yōu)楹笈_(tái)daemon,并監(jiān)控進(jìn)程狀態(tài),異常退出時(shí)能自動(dòng)重啟。

創(chuàng)新互聯(lián)主要從事網(wǎng)站制作、網(wǎng)站設(shè)計(jì)、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)臨西,十載網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專業(yè),歡迎來(lái)電咨詢建站服務(wù):18982081108
安裝
Supervisor是基于python開(kāi)發(fā)的,安裝Supervisor前,需要先安裝python,Supervisor可以通過(guò)pip或者easy_install安裝。
通過(guò)easy_install安裝
$ yum install python-setuptools
$ easy_install supervisor
或者,通過(guò)pip安裝
$ pip install supervisor
結(jié)構(gòu)
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)程管理。
Supervisorctl
管理client,用戶通過(guò)命令行發(fā)送消息給supervisord,可以查看進(jìn)程狀態(tài),加載配置文件,啟停進(jìn)程,查看進(jìn)程標(biāo)準(zhǔn)輸出和錯(cuò)誤輸出,遠(yuǎn)程操作等。
Web server
Superviosr提供了web server功能,可通過(guò)web控制進(jìn)程。
XML-RPC interface
XML-RPC接口,提供XML-RPC服務(wù)來(lái)對(duì)子進(jìn)程進(jìn)行管理,監(jiān)控。
基本使用
Supervisor的配置文件命名為supervisord.conf,它為supervisord(Supervisor 的主服務(wù)命令) 和 supervisorctl(Supervisor 的監(jiān)控管理命令) 提供配置選項(xiàng)設(shè)置。 Supervisor并不規(guī)定配置文件supervisord.conf的存放位置。Supervisor服務(wù)啟動(dòng)的時(shí)候默認(rèn)會(huì)在:
$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf
這幾個(gè)目錄位置查找配置文件supervisord.conf,用yum安裝的supervisor默認(rèn)會(huì)生成/etc/supervisord.conf配置文件。Supervisor也提供參數(shù) “-c” 來(lái)指定配置文件的目錄路徑。
如果你是編譯安裝,或其他系統(tǒng),可以在終端輸入”echo_supervisord_conf”命令查看Supervisor的默認(rèn)配置的內(nèi)容。其可以用來(lái)生成一份默認(rèn)的配置文件:
$ echo_supervisord_conf > /etc/supervisord.conf
Supervisor的配置文件生成之后,現(xiàn)在可以添加我們要管理的進(jìn)程的配置文件??梢园阉信渲庙?xiàng)都寫(xiě)到supervisord.conf文件里,但并不推薦這樣做,而是通過(guò)include的方式把不同的程序(組)寫(xiě)到不同的配置文件里。要確保你的supervisord.conf配置文件中include包含了你自定義的配置文件包含進(jìn)來(lái),如下:
[include]
files = /etc/supervisord.d/*.conf
下面我們修改配置文件將memcached進(jìn)程以deamon方式拉起(memcached進(jìn)程也可以是一個(gè)shell或python腳本),并對(duì)此進(jìn)行監(jiān)控。
先在supervisor目錄下創(chuàng)建一個(gè)配置文件,如下
$ cat /etc/supervisord.d/memcached.conf
[program:memcached]
# 啟動(dòng)程序的命令;
command = /usr/bin/memcached -m 5120 -p 11211 -u nobody -l 0.0.0.0 -b 65535
# 在supervisord啟動(dòng)的時(shí)候也自動(dòng)啟動(dòng);
autostart = true
# 程序異常退出后自動(dòng)重啟;
autorestart = true
# 啟動(dòng)5秒后沒(méi)有異常退出,就當(dāng)作已經(jīng)正常啟動(dòng)了;
startsecs = 5
# 啟動(dòng)失敗自動(dòng)重試次數(shù),默認(rèn)是3;
startretries = 3
# 啟動(dòng)程序的用戶;
user = nobody
# 把stderr重定向到stdout,默認(rèn)false;
redirect_stderr = true
# 標(biāo)準(zhǔn)日志輸出;
stdout_logfile=/data/log/memcached/out-memcache.log
# 錯(cuò)誤日志輸出;
stderr_logfile=/data/log/memcached/err-memcache.log
# 標(biāo)準(zhǔn)日志文件大小,默認(rèn)50MB;
stdout_logfile_maxbytes = 20MB
# 標(biāo)準(zhǔn)日志文件備份數(shù);
stdout_logfile_backups = 20
一份配置文件至少需要一個(gè) [program:x] 部分的配置,來(lái)告訴supervisord 需要管理那個(gè)進(jìn)程。[program:x]語(yǔ)法中的x表示program name,會(huì)在客戶端(supervisorctl 或 web 界面)顯示,在 supervisorctl 中通過(guò)這個(gè)值來(lái)對(duì)程序進(jìn)行start、restart、stop等操作。日志文件要存放的文件夾要?jiǎng)?chuàng)建好。
使用supervisor還有一個(gè)更大的好處就是,可以快速開(kāi)啟多個(gè)進(jìn)程,配置參數(shù)如下:
process_name=%(process_num)s
numprocs=3
表示對(duì)同一個(gè)配置開(kāi)啟3個(gè)線程。
啟動(dòng)supervisor,就會(huì)拉起memcached進(jìn)程。
$ supervisord -c /etc/supervisor/supervisord.conf
ps:Supervisor啟動(dòng)后在/tmp目錄會(huì)產(chǎn)生supervisord.log 、supervisord.pid 、supervisor.sock這三個(gè)文件,如果有問(wèn)題可以查看日志。
查看Supervisor是否已經(jīng)啟動(dòng)
$ ps -ef | grep supervisor | grep -v grep
root 1170 1 0 18:57 ? 00:00:00 /usr/bin/python /usr/bin/supervisord
查看業(yè)務(wù)進(jìn)程是否已經(jīng)被拉起
$ supervisorctl status
memcached RUNNING pid 1230, uptime 0:04:39
停止Supervisor(子進(jìn)程也會(huì)被停止,也可以針對(duì)單個(gè)程序進(jìn)行start、update、restart、stop操作)
$ supervisorctl shutdown
使用supervisorctl命令
Supervisor可通過(guò)維護(hù)命令supervisorctl管理或通過(guò)web管理界面管理。維護(hù)命令supervisorctl有兩種用法。一種是命令式,一種是交互式。
命令式
\1. 查詢各進(jìn)程運(yùn)行狀態(tài)
supervisorctl status
\2. 啟、停、重啟業(yè)務(wù)進(jìn)程,memcached為進(jìn)程名,即[program:memcached]里配置的值
supervisorctl start memcached
supervisorctl stop memcached
supervisorctl restart memcached
\3. 重啟所有屬于名為groupworker這個(gè)分組的進(jìn)程
supervisorctl start groupworker
supervisorctl stop groupworker
supervisorctl restart groupworker
\4. 啟、停、重啟全部進(jìn)程(不會(huì)載入最新的配置文件)
supervisorctl start all
supervisorctl stop all
supervisorctl restart all
\5. 重新加載配置文件,停止原有進(jìn)程并按新的配置啟動(dòng)所有進(jìn)程(注意:所有進(jìn)程會(huì)停止并重啟,線上操作慎重)
supervisorctl reload
\6. 根據(jù)最新的配置文件,啟動(dòng)新配置或有改動(dòng)的進(jìn)程,配置沒(méi)有改動(dòng)的進(jìn)程不會(huì)受影響而被重啟(注意:這才是線上可以操作的命令,不會(huì)重啟原有進(jìn)程)
supervisorctl update
注意:顯示狀態(tài)為stop停止掉的進(jìn)程,用reload或者update都不會(huì)自動(dòng)重啟。
交互式
$ supervisorctl
memcached RUNNING pid 1256, uptime 0:01:47
supervisor> stop memcached
memcached: stopped
supervisor> start memcached
memcached: started
supervisor> status
memcached RUNNING pid 1258, uptime 0:00:04
supervisor> restart memcached
memcached: stopped
memcached: started
supervisor> status
memcached RUNNING pid 1259, uptime 0:00:02
supervisor>
故障處理
這幾個(gè)故障都是我使用supervisor時(shí)遇到的坑,幫你們填上。
supervisor 比較適合監(jiān)控業(yè)務(wù)應(yīng)用,且只能監(jiān)控前臺(tái)程序,如果你的程序是以daemon的方式啟動(dòng),那么執(zhí)行:supervisor status 會(huì)提示:BACKOFF Exited too quickly (process log may have details)。比如:memcached啟動(dòng)時(shí)加上-d選項(xiàng)就是以后臺(tái)daemon啟動(dòng),就不能使用supervisor監(jiān)控了。
/usr/bin/memcached -d -m 5120 -p 11211 -u nobody -l 0.0.0.0 -b 65535
還有一個(gè)需要注意的,如果執(zhí)行supervisor status時(shí)報(bào)錯(cuò)是:FATAL Exited too quickly (process log may have details),要檢查一下是不是因?yàn)樘砑恿藆ser = nobody導(dǎo)致執(zhí)行權(quán)限的問(wèn)題。
如果出現(xiàn)這個(gè)錯(cuò)誤:
Error: .ini file does not include supervisord section
For help, use /usr/bin/supervisord -h
就是你的自定義的程序配置文件格式有問(wèn)題(/etc/supervisor/conf.d/*.conf),好好檢查了。
其他
1)可以自己編寫(xiě)腳本將Supervisor加入chkconfig中,隨系統(tǒng)自動(dòng)啟動(dòng)。 或者可以使用現(xiàn)成的腳本: Supervisor initscripts。
2)除了supervisorctl 之外,還可以配置supervisrod啟動(dòng)web管理界面,這個(gè)web后臺(tái)使用Basic Auth的方式進(jìn)行身份認(rèn)證。
3)除了單個(gè)進(jìn)程的控制,還可以配置group,進(jìn)行分組管理。經(jīng)常查看日志文件,包括 supervisord的日志和各個(gè) pragram 的日志文件,程序crash 或拋出異常的信息一半會(huì)輸出到stderr,可以查看相應(yīng)的日志文件來(lái)查找問(wèn)題。
4)Supervisor有很豐富的功能,還有其他很多項(xiàng)配置,可以在官方文檔獲取更多信息:http://supervisord.org/index.html
網(wǎng)頁(yè)名稱:Linux下安裝并使用Supervisor
當(dāng)前鏈接:http://www.dlmjj.cn/article/ccdoijd.html


咨詢
建站咨詢
