Supervisor是一款專注于進(jìn)程管理與監(jiān)控的工具,由Geoffrey Talvola開發(fā),采用Python語言編寫,尤其適合在類UNIX系統(tǒng)(像Linux和macOS)中使用。Supervisor設(shè)計(jì)初衷是為了簡化進(jìn)程管理流程,確保即便進(jìn)程出現(xiàn)崩潰或意外退出的情況,也能自動將其重啟,進(jìn)而保障系統(tǒng)的穩(wěn)定性和服務(wù)的持續(xù)運(yùn)行。
一、Supervisor特點(diǎn)
由于Linux操作系統(tǒng)本身就內(nèi)置了Python運(yùn)行環(huán)境,而且Supervisor沒有過多的第三方依賴包,整個(gè)離線源碼安裝壓縮包僅500k左右,因此使用和安裝門檻較低,無需我們?yōu)榘惭b該軟件投入過多精力或引入額外的第三方依賴。
Supervisor擁有大量的使用者,開源項(xiàng)目活躍度高,當(dāng)遇到問題時(shí),很容易就能搜索到相關(guān)資料,避免了用戶獨(dú)自摸索、踩坑的情況。項(xiàng)目成熟度高,經(jīng)過了市場的長期驗(yàn)證,大家可以放心使用。
二、Supervisor安裝教程
1、Supervisor在線安裝
(1)pip安裝:
pip install supervisor
(2)centos yum安裝
yum install epel-release -y
再執(zhí)行:
yum install supervisor -y。
2、Supervisor離線安裝
在pypi上搜索supervisor包并下載源碼包,地址為:
https://files.pythonhosted.org/packages/ce/37/517989b05849dd6eaa76c148f24517544704895830a50289cbbf53c7efb9/supervisor-4.2.5.tar.gz
或也可通過wget命令下載:
“https://files.pythonhosted.org/packages/ce/37/517989b05849dd6eaa76c148f24517544704895830a50289cbbf53c7efb9/supervisor-4.2.5.tar.gz”
運(yùn)行python3 setup.py install進(jìn)行安裝。若過程中提示缺少某些package,補(bǔ)充相應(yīng)package即可。這些package的安裝方式類似,也是下載源碼包后通過python執(zhí)行setup.py安裝。
三、Supervisor基本架構(gòu)說明
Supervisor運(yùn)行架構(gòu)以客戶端/服務(wù)器(Client/Server)模型為基礎(chǔ),核心組件包括supervisord守護(hù)進(jìn)程、supervisorctl客戶端工具,此外還提供了一個(gè)HTTP服務(wù)器,用于遠(yuǎn)程管理和監(jiān)控。
1、supervisord服務(wù)端
supervisord是Supervisor的核心組件,作為守護(hù)進(jìn)程在服務(wù)器上運(yùn)行,主要職責(zé)如下:
(1)讀取配置文件:從配置文件中獲取被監(jiān)控進(jìn)程的列表及相關(guān)參數(shù)。
(2)管理進(jìn)程:啟動、停止和重啟配置文件中定義的進(jìn)程。
(3)監(jiān)控進(jìn)程狀態(tài):實(shí)時(shí)監(jiān)視進(jìn)程的運(yùn)行狀態(tài),一旦進(jìn)程因某種原因退出,會根據(jù)配置自動重啟。
(4)日志管理:收集被監(jiān)控進(jìn)程的輸出,并將其重定向到日志文件。
(5)事件通知:當(dāng)進(jìn)程狀態(tài)發(fā)生變化時(shí),能夠觸發(fā)預(yù)定義的事件處理程序。
2、supervisorctl客戶端
supervisorctl是一款命令行工具,作為客戶端與supervisord守護(hù)進(jìn)程進(jìn)行通信,可執(zhí)行以下操作:
(1)管理進(jìn)程:實(shí)現(xiàn)進(jìn)程的啟動、停止、重啟,并能顯示進(jìn)程狀態(tài)。
(2)配置管理:在不重啟supervisord的情況下更新配置文件。
(3)事件管理:查看和管理事件處理程序。
(4)連接服務(wù)端:通過與supervisord建立RPC連接來發(fā)送命令和接收響應(yīng),因此只要網(wǎng)絡(luò)可達(dá)且權(quán)限合適,可在任何地方對supervisord進(jìn)行管理。
四、Supervisor使用教程
啟動supervisord守護(hù)進(jìn)程,啟動后默認(rèn)在后臺運(yùn)行,并監(jiān)聽一個(gè)本地socket文件。主配置文件默認(rèn)位于/ect/supervisord/supervisord.conf,我們通常在supervisord.d目錄下定義管理進(jìn)程的.ini配置文件,文件格式大致如下:
[program:mysql] # mysql,程序名稱
directory = /data/mysql/ # 程序所處工作路徑
command=/data/mysql/bin/mysqld # 程序啟動完整命令
autostart=true # 是否掛掉后自動拉起
autorestart=true # 是否掛掉后自動拉起
startretries=3 #重試?yán)鸫螖?shù)
startsecs=20 #多少秒后沒掛,認(rèn)為程序是正常運(yùn)行的
redirect_stderr=true #是否重定向錯(cuò)誤輸出到標(biāo)準(zhǔn)輸出
stdout_logfile=/data/mysql/supervisor-run.log #標(biāo)準(zhǔn)輸出日志路徑
1、執(zhí)行supervisorctl reread重新讀取新的配置信息。
2、運(yùn)行supervisor update mysql啟動托管的mysql任務(wù)。
3、輸入supervisor status查看任務(wù)運(yùn)行情況。
此時(shí)若進(jìn)程意外退出,比如手動執(zhí)行kill -9 $pid,過一會兒會發(fā)現(xiàn)該進(jìn)程會被supervisor重新拉起,從而保證進(jìn)程的正常運(yùn)行。
五、supervisorctl常見子命令詳解
1、start/stop/restart/status
start用于啟動任務(wù)、stop用于停止任務(wù)、restart用于重啟任務(wù)、status用于查看任務(wù)運(yùn)行狀態(tài)列表。
針對單個(gè)任務(wù):
supervisorctl start mysql
supervisorctl stop mysql
supervisorctl restart mysql
針對所有任務(wù):
supervisorctl stop all
查看托管的程序運(yùn)行狀態(tài)列表:
supervisorctl status
2、update
該命令用于更新Supervisor的配置,并重啟所有需要重啟的進(jìn)程,通常在更改配置文件后使用:
supervisorctl update mysql
3、Reread
重新讀取配置文件,但不會重啟任何進(jìn)程,一般用于檢查配置文件的更改是否有效:
supervisorctl reread
4、reload
結(jié)合了reread和update的功能,重新讀取配置文件并更新進(jìn)程:
supervisorctl reload
5、remove
用于移除對一個(gè)或多個(gè)進(jìn)程的監(jiān)控:
supervisorctl remove mysql
6、tail
顯示進(jìn)程的最近日志輸出,其中-f表示跟隨日志的實(shí)時(shí)輸出:
supervisorctl tail -f myapp
-
廣告合作
-
QQ群號:4114653