溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

工作積累(十二)——Supervisor安裝及使用

發(fā)布時間:2020-07-12 09:47:04 來源:網(wǎng)絡(luò) 閱讀:6847 作者:細桶假狗屎 欄目:系統(tǒng)運維

Supervisor是由Python開發(fā)的用于監(jiān)控類UNIX上進程運行狀態(tài)的工具。在部署Python Web時,經(jīng)常使用這樣一種架構(gòu),即Nginx + Gunicorn + Supervisor + Django/Flask/Tornado/Webpy/Pyramid。Supervisor在這里起到的作用是監(jiān)控Gunicorn,在Gunicorn宕掉后使其重啟,增強系統(tǒng)的穩(wěn)定性。推而廣之,可以用Supervisor監(jiān)控Tomcat,MySQL,Redis等。下面介紹一下其安裝和使用。

1. 安裝

Supervisor只能運行在類UNIX系統(tǒng)中,如Linux,Mac OS和Solaris等,不支持任何版本的Windows系統(tǒng)。同時,Supervisor需要Python 2.4或更新版本的Python支持。

下面介紹兩種安裝方式。

1.1 pip方式

在系統(tǒng)已安裝pip且可以連接外網(wǎng)時,安裝十分簡單,pip install會和yum install、apt-get一樣自動安裝依賴文件:

[root@localhost ~]# pip install supervisor
1.2 手動安裝

手動安裝又分為可以連接外網(wǎng)和不能連接外網(wǎng)的情況,均需要setuptools的支持,否則在

python setup.py install

時會報如下錯誤:

Traceback (most recent call last):
  File "setup.py", line 32, in <module>
    from setuptools import setup, find_packages
ImportError: No module named setuptools

關(guān)于pip及setuptools的安裝可以參考這里。

1.2.1 可以連接外網(wǎng)

可以連接外網(wǎng)時,python setup.py install會自動安裝依賴文件:

[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
1.2.1 不能連接外網(wǎng)

不能連接外網(wǎng)時,需要先手動安裝Supervisor所依賴的文件,以下列出:

meld3

elementtree

其中,meld3是必須安裝的,elementtree博主并未安裝,依然可以成功,讀者可以在安裝完meld3后先試驗一下,如果Supervisor可以安裝成功,則可不再安裝elementtree。

安裝依賴文件的方法請參考1.2.1節(jié),這里不再贅述。

安裝成功后,多出4個命令文件,分別為supervisord,supervisorctl,pidproxy,echo_supervisord_conf,這些命令文件位于python安裝目錄下(和pip配置有關(guān)),如/usr/local/python2.7.10/bin/supervisord

2. 使用

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

為了快速開始使用,僅對生成的配置文件模板做少許修改。詳細的配置文件說明可以參考這里。

2.1 以root用戶啟動Supervisor

如果我們以root用戶啟動Supervisor,需要在[supervisord]下指定user=root

[supervisord]
...
user=root
...

啟動Supervisor:

[root@localhost ~]# supervisord -c /etc/supervisord.conf

這里要說明的一點是,在運行Supervisor時,如果沒有使用-c選項指定所使用的配置文件,Supervisor會自動依次尋找以下位置的配置文件:

$CWD/supervisord.conf
$CWD/etc/supervisord.conf
/etc/supervisord.conf

如果在這些位置沒有找到配置文件,會報如下錯誤信息:

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
2.2 監(jiān)控進程

修改配置文件,在[program:custom_name]添加配置,這里我們以監(jiān)控redis為例:

[program:redis_monitor]
command=/usr/local/redis/bin/redis-server /etc/redis.conf ;指定監(jiān)控的命令,重要
directory=/root ;指定命令運行的目錄
autorestart=true ;指定在什么情況下自動重啟
user=root ;指定以哪個用戶運行command命令
;其他配置使用默認值即可

重新啟動Supervisor,建議使用如下方式啟動,將其放入后臺,同時將supervisord的運行日志放入nohup.out中:

[root@localhost ~]# nohup supervisord -n -c /etc/supervisord.conf &
2.3 supervisorctl

supervisorctl是一個Supervisor的命令行控制臺,使用它可以方便的對supervisord進行重啟、關(guān)閉,也可以對單獨的[program:custom_name]進程監(jiān)控進行啟動、關(guān)閉等,當(dāng)監(jiān)控的進程較多時操作起來十分方便,能夠做到選擇性的啟動、關(guān)閉被監(jiān)控的進程。這里簡單介紹一下它的用法。

在配置文件supervisord.conf中有對supervisorctl的配置,

[unix_http_server]          ; 采用unix socket連接supervisord server,默認開啟
file=/tmp/supervisor.sock   ; 指定socket文件所在位置
;chmod=0700                 ; 指定socket文件權(quán)限,默認為0700
;chown=nobody:nogroup       ; 指定socket文件屬主和屬組
;username=user              ; 指定supervisorctl連接時需要使用的用戶名,默認不需用戶名
;password=123               ; 指定supervisorctl連接時需要使用的密碼,默認不需密碼

;[inet_http_server]         ; 采用HTPP連接supervisord server,默認關(guān)閉
;port=127.0.0.1:9001        ; 指定可以連接supervisord server的ip地址及其所使用的端口號,*:port針對任何ip開放連接權(quán)限
;username=user              ; 指定supervisorctl連接時需要使用的用戶名,默認不需用戶名
;password=123               ; 指定supervisorctl連接時需要使用的密碼,默認不需密碼

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 使用unix socket連接supervisord server
;serverurl=http://127.0.0.1:9001 ; 使用HTTP連接supervisord server
;username=chris              ; 指定連接server時使用的用戶名
;password=123                ; 指定連接server時使用的密碼
;prompt=mysupervisor         ; 命令行提示符,默認為 supervisor>
;history_file=~/.sc_history  ; 打開命令行歷史記錄,可以使用↑↓鍵尋找歷史命令

supervisorctl不能用來遠程打開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í)行配置文件進行連接,連接后

[root@localhost ~]# supervisorctl -c /etc/supervisord.conf
redis.monitor                    RUNNING   pid 54662, uptime 0:49:38

連接成功后可以通過其中的help命令查看可以使用的命令及每條命令的作用:

supervisor> help

default commands (type help <topic>):
=====================================
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.

針對每條命令的作用這里不再贅述,另外說明一點,當(dāng)開啟[inet_http_server]時可以從瀏覽器中查看supervisord運行狀態(tài),讀者可以自己嘗試一下。

Supervisor不止可以監(jiān)控進程,還有其他功能,這里我們只介紹了這個常用功能,有興趣的讀者可以參考其官方文檔。

完。


向AI問一下細節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI