摘要:首發(fā)于樊浩柏科學(xué)院是一款使用開發(fā)的非常優(yōu)秀的進(jìn)程管理工具。它可以在類系統(tǒng)上讓用戶精確地監(jiān)視與控制多組指定數(shù)量的服務(wù)進(jìn)程。當(dāng)監(jiān)控的服務(wù)進(jìn)程意外退出時(shí),會(huì)嘗試自動(dòng)重啟這些服務(wù),以保持服務(wù)可用狀態(tài)。安裝官方提供的安裝方式較多,這里采用方式安裝。
首發(fā)于 樊浩柏科學(xué)院
Supervisor 是一款使用 Python 開發(fā)的非常優(yōu)秀的進(jìn)程管理工具。它可以在類 UNIX 系統(tǒng)上讓用戶精確地監(jiān)視與控制多組指定數(shù)量的服務(wù)進(jìn)程。當(dāng)監(jiān)控的服務(wù)進(jìn)程意外退出時(shí),會(huì)嘗試自動(dòng)重啟這些服務(wù),以保持服務(wù)可用狀態(tài)。
安裝Supervisor 官方 提供的安裝方式較多,這里采用 pip 方式安裝。
安裝pip$ yum install python-pip # 升級(jí)pip $ pip install --upgrade pip $ pip -V pip 9.0.1安裝Supervisor
通過 pip 安裝 Supervisor:
$ pip install supervisor Successfully installed supervisor-3.3.3
安裝 Supervisor 后,會(huì)出現(xiàn) supervisorctl 和 supervisord 兩個(gè)程序,其中 supervisorctl 為服務(wù)監(jiān)控終端,而 supervisord 才是所有監(jiān)控服務(wù)的大腦。查看 supervisord 是否安裝成功:
$ supervisord -v 3.3.3開機(jī)啟動(dòng)
將 supervisord 配置成開機(jī)啟動(dòng)服務(wù),下載官方 init 腳本。
修改關(guān)鍵路徑配置:
PIDFILE=/var/run/supervisord.pid LOCKFILE=/var/lock/subsys/supervisord OPTIONS="-c /etc/supervisord.conf"
移到該文件到/etc/init.d目錄下,并重命名為 supervisor,添加可執(zhí)行權(quán)限:
$ chmod 777 /etc/init.d/supervisor
配置成開機(jī)啟動(dòng)服務(wù):
$ chkconfig --add supervisor $ chkconfig supervisor on $ chkconfig --list | grep "supervisor" supervisor 0:off 1:off 2:on 3:on 4:on 5:on 6:off配置 生成配置文件
Supervisord 安裝后,需要使用如下命令生成配置文件。
$ mkdir /etc/supervisor $ echo_supervisord_conf > /etc/supervisor/supervisord.conf主配置部分
supervisord.conf的主配置部分說明:
[unix_http_server] file=/tmp/supervisor.sock ; socket文件的路徑 ;chmod=0700 ; socket文件權(quán)限 ;chown=nobody:nogroup ; socket文件用戶和用戶組 ;username=user ; 連接時(shí)認(rèn)證的用戶名 ;password=123 ; 連接時(shí)認(rèn)證的密碼 [inet_http_server] ; 監(jiān)聽TCP port=127.0.0.1:9001 ; 監(jiān)聽ip和端口 username=user ; 連接時(shí)認(rèn)證的用戶名 password=123 ; 連接時(shí)認(rèn)證的密碼 [supervisord] logfile=/var/log/supervisord.log ; log目錄 logfile_maxbytes=50MB ; log文件最大空間 logfile_backups=10 ; log文件保持的數(shù)量 loglevel=info ; log級(jí)別 pidfile=/var/run/supervisord.pid nodaemon=false ; 是否非守護(hù)進(jìn)程態(tài)運(yùn)行 minfds=1024 ; 系統(tǒng)空閑的最少文件描述符 minprocs=200 ; 可用的最小進(jìn)程描述符 ;umask=022 ; 進(jìn)程創(chuàng)建文件的掩碼 ;identifier=supervisor ; supervisord標(biāo)識(shí)符 ;directory=/tmp ; 啟動(dòng)前切換到的目錄 ;nocleanup=true ; 啟動(dòng)前是否清除子進(jìn)程的日志文件 ;childlogdir=/tmp ; AUTO模式,子進(jìn)程日志路徑 ;environment=KEY="value" ; 設(shè)置環(huán)境變量 [rpcinterface:supervisor] ; XML_RPC配置 supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock ; 連接的socket路徑 ;username=chris ; 用戶名 ;password=123 ; 密碼 prompt=mysupervisor ; 輸入用戶名和密碼時(shí)的提示符 ;history_file=~/.sc_history ; 歷史操作記錄存儲(chǔ)路徑 [include] ; 包含文件,將每個(gè)進(jìn)程配置為一個(gè)文件并包含 files = /etc/supervisor/*.ini ; 多個(gè)進(jìn)程的配置文件
這部分我們不需要做太多的配置修改,如果需要開啟 WEB 終端監(jiān)控,則需要配置并開啟 inet_http_server 項(xiàng)。
進(jìn)程配置部分Supervisor 需管理的進(jìn)程服務(wù)配置,示例如下:
[program:work] ; 服務(wù)名,例如work command=php -r "sleep(10);exit(1);" ; 帶有參數(shù)的可執(zhí)行命令 process_name=%(process_num)s ; 進(jìn)程名,當(dāng)numprocs>1時(shí),需包含%(process_num)s numprocs=2 ; 啟動(dòng)進(jìn)程的數(shù)目數(shù) ;directory=/tmp ; 運(yùn)行前切換到該目錄 ;umask=022 ; 進(jìn)程掩碼 ;priority=999 ; 子進(jìn)程啟動(dòng)關(guān)閉優(yōu)先級(jí) autostart=true ; 子進(jìn)程是否被自動(dòng)啟動(dòng) startsecs=1 ; 成功啟動(dòng)幾秒后則認(rèn)為成功啟動(dòng) ;startretries=3 ; 子進(jìn)程啟動(dòng)失敗后,最大嘗試啟動(dòng)的次數(shù) autorestart=unexpected ; 子進(jìn)程意外退出后自動(dòng)重啟的選項(xiàng),false,?unexpected,?true。unexpected表示不在exitcodes列表時(shí)重啟 exitcodes=0,2 ; 期待的子程序退出碼 ;stopsignal=QUIT ; 進(jìn)程停止信號(hào),可以為TERM,HUP,INT,QUIT,KILL,USR1,or?USR2等信號(hào),默認(rèn)為TERM ;stopwaitsecs=10 ; 發(fā)送停止信號(hào)后等待的最大時(shí)間 ;stopasgroup=false ; 是否向子進(jìn)程組發(fā)送停止信號(hào) ;killasgroup=false ; 是否向子進(jìn)程組發(fā)送kill信號(hào) ;redirect_stderr=true ; 是否重定向日志到標(biāo)準(zhǔn)輸出 stdout_logfile=/data/logs/work.log ; 進(jìn)程的stdout的日志路徑 ;stdout_logfile_maxbytes=1MB ; 日志文件最大大小 ;stdout_logfile_backups=10 ;stdout_capture_maxbytes=1MB ;stderr_logfile=/a/path ; stderr的日志路徑 ;stderr_logfile_maxbytes=1MB ;stderr_logfile_backups=10 ;stderr_capture_maxbytes=1MB ;environment=A="1",B="2" ; 子進(jìn)程的環(huán)境變量 ;serverurl=AUTO ; 子進(jìn)程的環(huán)境變量SUPERVISOR_SERVER_URL
通常將每個(gè)進(jìn)程的配置信息配置成獨(dú)立文件,并通過 include 模塊包含,這樣方便修改和管理配置文件。啟動(dòng)
配置完成后,啟動(dòng) supervisord 守護(hù)服務(wù):
$ supervisord -c /etc/supervisor/supervisord.conf
常用的命令參數(shù)說明:
-c:指定配置文件路徑
-n:是否非守護(hù)態(tài)運(yùn)行
-l:日志文件目錄
-i:唯一標(biāo)識(shí)
查看 supervisord 啟動(dòng)情況:
$ ps -ef | grep "supervisor" root 24901 1 0 Sep23 ? 00:00:30 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf $ netstat -tunpl tcp 0 0 127.0.0.1:9001 0.0.0.0:* LISTEN 24901/python監(jiān)控進(jìn)程
Supervisor 提供了多種監(jiān)控服務(wù)的方式,包括 supervisorctl 命令行終端、Web 端、XML_RPC 接口多種方式。
命令終端直接使用 supervisorctl 即可在命令行終端查看所有服務(wù)的情況,如下:
$ supervisorctl work:0 RUNNING pid 31313, uptime 0:00:07 work:1 RUNNING pid 31318, uptime 0:00:06 # -u 用戶名 -p 密碼
supervisorctl 常用命令列表如下;
status:查看服務(wù)狀態(tài)
update:重新加載配置文件
restart:重新啟動(dòng)服務(wù)
stop:停止服務(wù)
pid:查看某服務(wù)的 pid
tail:輸出最新的 log 信息
shutdown:關(guān)閉 supervisord 服務(wù)
Web在配置中開啟 inet_http_server 后,即可通過 Web 界面便捷地監(jiān)控進(jìn)程服務(wù)了。
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/31078.html
摘要:使用開發(fā)的一個(gè)服務(wù),是系統(tǒng)下的一個(gè)進(jìn)程管理工具。一切就緒后,我們使用如下命令就可以啟動(dòng)隊(duì)列進(jìn)程的監(jiān)聽了這里值得注意的是,如果處理隊(duì)列的代碼更改了,需要重啟的隊(duì)列管理才能生效。 supervisor使用python開發(fā)的一個(gè)client/server服務(wù),是linux/unix系統(tǒng)下的一個(gè)進(jìn)程管理工具。它可以很方便的監(jiān)聽、停止、重啟一個(gè)或多個(gè)進(jìn)程。用supervisor管理的進(jìn)程,打你...
閱讀 1335·2021-11-15 11:37
閱讀 3519·2021-11-11 16:55
閱讀 1778·2021-08-25 09:39
閱讀 3241·2019-08-30 15:44
閱讀 1754·2019-08-29 12:52
閱讀 1429·2019-08-29 11:10
閱讀 3262·2019-08-26 11:32
閱讀 3252·2019-08-26 10:16