Supervisor是由Python開發(fā)的用于監(jiān)控類UNIX上進(jìn)程運(yùn)行狀態(tài)的工具。在部署Python Web時(shí),經(jīng)常使用這樣一種架構(gòu),即Nginx + Gunicorn + Supervisor + Django/Flask/Tornado/Webpy/Pyramid。Supervisor在這里起到的作用是監(jiān)控Gunicorn,在Gunicorn宕掉后使其重啟,增強(qiáng)系統(tǒng)的穩(wěn)定性。推而廣之,可以用Supervisor監(jiān)控Tomcat,MySQL,redis等。下面介紹一下其安裝和使用。
網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁(yè)設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了西豐免費(fèi)建站歡迎大家使用!
Supervisor只能運(yùn)行在類UNIX系統(tǒng)中,如Linux,Mac OS和Solaris等,不支持任何版本的Windows系統(tǒng)。同時(shí),Supervisor需要Python 2.4或更新版本的Python支持。
下面介紹兩種安裝方式。
在系統(tǒng)已安裝pip且可以連接外網(wǎng)時(shí),安裝十分簡(jiǎn)單,pip install會(huì)和yum install、apt-get一樣自動(dòng)安裝依賴文件:
[root@localhost ~]# pip install supervisor
手動(dòng)安裝又分為可以連接外網(wǎng)和不能連接外網(wǎng)的情況,均需要setuptools的支持,否則在
python setup.py install
時(shí)會(huì)報(bào)如下錯(cuò)誤:
Traceback (most recent call last): File "setup.py", line 32, infrom setuptools import setup, find_packages ImportError: No module named setuptools
關(guān)于pip及setuptools的安裝可以參考這里。
可以連接外網(wǎng)時(shí),python setup.py install會(huì)自動(dòng)安裝依賴文件:
[root@localhost ~]# cd /usr/local/src [root@localhost src]# wget https://pypi.python.org/packages/source/s/supervisor/supervisor-3.1.3.tar.gz [root@localhost src]# tar zxf supervisor-3.1.3.tar.gz [root@localhost src]# cd supervisor-3.1.3 [root@localhost supervisor-3.1.3]# python setup.py install
不能連接外網(wǎng)時(shí),需要先手動(dòng)安裝Supervisor所依賴的文件,以下列出:
meld3
elementtree
其中,meld3是必須安裝的,elementtree博主并未安裝,依然可以成功,讀者可以在安裝完meld3后先試驗(yàn)一下,如果Supervisor可以安裝成功,則可不再安裝elementtree。
安裝依賴文件的方法請(qǐng)參考1.2.1
節(jié),這里不再贅述。
安裝成功后,多出4個(gè)命令文件,分別為supervisord,supervisorctl,pidproxy,echo_supervisord_conf,這些命令文件位于python安裝目錄下(和pip配置有關(guān)),如/usr/local/python2.7.10/bin/supervisord
Supervisor的配置文件采用Windows ini文件的風(fēng)格,以;
開頭注釋內(nèi)容。使用安裝Supervisor后產(chǎn)生的echo_supervisord_conf命令可以生成配置文件模板:
[root@localhost ~]# /usr/local/python2.7.10/bin/echo_supervisord_conf >> /etc/supervisord.conf
為了快速開始使用,僅對(duì)生成的配置文件模板做少許修改。詳細(xì)的配置文件說明可以參考這里。
如果我們以root用戶啟動(dòng)Supervisor,需要在[supervisord]下指定user=root
:
[supervisord] ... user=root ...
啟動(dòng)Supervisor:
[root@localhost ~]# supervisord -c /etc/supervisord.conf
這里要說明的一點(diǎn)是,在運(yùn)行Supervisor時(shí),如果沒有使用-c
選項(xiàng)指定所使用的配置文件,Supervisor會(huì)自動(dòng)依次尋找以下位置的配置文件:
$CWD/supervisord.conf $CWD/etc/supervisord.conf /etc/supervisord.conf
如果在這些位置沒有找到配置文件,會(huì)報(bào)如下錯(cuò)誤信息:
Error: No config file found at default paths (/usr/etc/supervisord.conf, /usr/supervisord.conf, supervisord.conf, etc/supervisord.conf, /etc/supervisord.conf); use the -c option to specify a config file at a different path
修改配置文件,在[program:custom_name]
添加配置,這里我們以監(jiān)控redis為例:
[program:redis_monitor] command=/usr/local/redis/bin/redis-server /etc/redis.conf ;指定監(jiān)控的命令,重要 directory=/root ;指定命令運(yùn)行的目錄 autorestart=true ;指定在什么情況下自動(dòng)重啟 user=root ;指定以哪個(gè)用戶運(yùn)行command命令 ;其他配置使用默認(rèn)值即可
重新啟動(dòng)Supervisor,建議使用如下方式啟動(dòng),將其放入后臺(tái),同時(shí)將supervisord的運(yùn)行日志放入nohup.out
中:
[root@localhost ~]# nohup supervisord -n -c /etc/supervisord.conf &
supervisorctl
是一個(gè)Supervisor的命令行控制臺(tái),使用它可以方便的對(duì)supervisord
進(jìn)行重啟、關(guān)閉,也可以對(duì)單獨(dú)的[program:custom_name]
進(jìn)程監(jiān)控進(jìn)行啟動(dòng)、關(guān)閉等,當(dāng)監(jiān)控的進(jìn)程較多時(shí)操作起來十分方便,能夠做到選擇性的啟動(dòng)、關(guān)閉被監(jiān)控的進(jìn)程。這里簡(jiǎn)單介紹一下它的用法。
在配置文件supervisord.conf
中有對(duì)supervisorctl
的配置,
[unix_http_server] ; 采用unix socket連接supervisord server,默認(rèn)開啟 file=/tmp/supervisor.sock ; 指定socket文件所在位置 ;chmod=0700 ; 指定socket文件權(quán)限,默認(rèn)為0700 ;chown=nobody:nogroup ; 指定socket文件屬主和屬組 ;username=user ; 指定supervisorctl連接時(shí)需要使用的用戶名,默認(rèn)不需用戶名 ;password=123 ; 指定supervisorctl連接時(shí)需要使用的密碼,默認(rèn)不需密碼 ;[inet_http_server] ; 采用HTPP連接supervisord server,默認(rèn)關(guān)閉 ;port=127.0.0.1:9001 ; 指定可以連接supervisord server的ip地址及其所使用的端口號(hào),*:port針對(duì)任何ip開放連接權(quán)限 ;username=user ; 指定supervisorctl連接時(shí)需要使用的用戶名,默認(rèn)不需用戶名 ;password=123 ; 指定supervisorctl連接時(shí)需要使用的密碼,默認(rèn)不需密碼 [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; 使用unix socket連接supervisord server ;serverurl=http://127.0.0.1:9001 ; 使用HTTP連接supervisord server ;username=chris ; 指定連接server時(shí)使用的用戶名 ;password=123 ; 指定連接server時(shí)使用的密碼 ;prompt=mysupervisor ; 命令行提示符,默認(rèn)為 supervisor> ;history_file=~/.sc_history ; 打開命令行歷史記錄,可以使用↑↓鍵尋找歷史命令
supervisorctl
不能用來遠(yuǎn)程打開supervisord
,使用如下命令連接已開啟的Supervisord,其中-s
指定連接server的形式(unix socket/HTTP),-u
指定用戶名,-p
指定密碼:
[root@localhost ~]# supervisorctl -s unix:///tmp/supervisor.sock -u user -p 123
如果在配置文件中已經(jīng)將這些參數(shù)在[supervisorctl]
中配置完成,可直接執(zhí)行配置文件進(jìn)行連接,連接后
[root@localhost ~]# supervisorctl -c /etc/supervisord.conf redis.monitor RUNNING pid 54662, uptime 0:49:38
連接成功后可以通過其中的help
命令查看可以使用的命令及每條命令的作用:
supervisor> help default commands (type help): ===================================== add clear fg open quit remove restart start stop update avail exit maintail pid reload reread shutdown status tail version supervisor> help reload reload Restart the remote supervisord.
針對(duì)每條命令的作用這里不再贅述,另外說明一點(diǎn),當(dāng)開啟[inet_http_server]
時(shí)可以從瀏覽器中查看supervisord
運(yùn)行狀態(tài),讀者可以自己嘗試一下。
Supervisor不止可以監(jiān)控進(jìn)程,還有其他功能,這里我們只介紹了這個(gè)常用功能,有興趣的讀者可以參考其官方文檔。
完。