【管理工具】程序管理工具Supervisor(送書活動)
簡單介紹
Supervisor是一個用戶端/伺服器系統,允許使用者在類UNIX作業系統上控制許多程序。它是基于python語言開發一個程序管理工具。
Supervisor的伺服器端稱為supervisord,主要負責在啟動自身時啟動管理的子程序,響應用戶端的指令,重新開機崩潰或退出的子程序,記錄子程序stdout和stderr輸出,生成和處理子程序生命周期中的事件。可以在一個配置檔案中配置相關參數,包括Supervisord自身的狀态,其 管理的各個子程序的相關屬性。配置檔案一般位于/etc/supervisord.conf。
Supervisor的用戶端稱為supervisorctl,它提供了一個類shell的接口(即指令行)來使用supervisord服務端提供的功 能。通過supervisorctl,使用者可以連接配接到supervisord伺服器程序,獲得伺服器程序控制的子程序的狀态,啟動和停止子程序,獲得正在 運作的程序清單。用戶端通過Unix域套接字或者TCP套接字與服務端進行通信,伺服器端具有身份憑證認證機制,可以有效提升安全性。當用戶端和伺服器位 于同一台機器上時,用戶端與伺服器共用同一個配置檔案/etc/supervisord.conf,通過不同标簽來區分兩者的配置。
Supervisor也提供了一個web頁面來檢視和管理程序狀态,這個功能用得人比較少。
官方網站:http://supervisord.org

安裝環境準備
系統環境
[root@nginx ~]# cat /etc/redhat-release
CentOS Linux release 7.4.1708 (Core)
[root@nginx ~]# uname -r
3.10.0-693.17.1.el7.x86_64
[root@nginx ~]# python --version
Python 2.7.5
如果沒有安裝 python環境可以使用yum install python -y進行安裝
平台要求
Supervisor可以運作在大多數Unix系統上,但不支援在Windows系統上運作。
Supervisor需要Python2.4及以上版本,但任何Python 3版本都不支援。
安裝supervisor服務
安裝easy_install
[root@nginx ~]# yum install python-setuptools-devel -y
安裝supervisor
easy_install supervisor
supervisor安裝完成後會生成三個執行程式:
supervisortd
#supervisor的守護程序服務(用于接收程序管理指令)
supervisorctl
#用戶端(用于和守護程序通信,發送管理程序的指令)
echo_supervisord_conf
#生成初始配置檔案程式
建立配置檔案
一般可以通過運作echo_supervisord_conf程式生成supervisor的初始化配置檔案
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
[root@ ~]# ll /etc/supervisor/supervisord.conf
-rw-r--r-- 1 root root 9710 Jan 24 15:10 /etc/supervisor/supervisord.conf
配置檔案參數介紹
[unix_http_server]
file=/tmp/supervisor.sock ;UNIX socket 檔案,supervisorctl 會使用
;chmod=0700 ;socket檔案的mode,預設是0700
;chown=nobody:nogroup ;socket檔案的owner,格式:uid:gid
;[inet_http_server] ;HTTP伺服器,提供web管理界面
;port=127.0.0.1:9001
;Web管理背景運作的IP和端口,如果開放到公網,需要注意安全性
;username=user ;登入管理背景的使用者名
;password=123 ;登入管理背景的密碼
[supervisord]
logfile=/tmp/supervisord.log
;日志檔案,預設是 $CWD/supervisord.log
logfile_maxbytes=50MB
;日志檔案大小,超出會rotate,預設 50MB,如果設成0,表示不限制大小
logfile_backups=10 ;日志檔案保留備份數量預設10,設為0表示不備份
loglevel=info ;日志級别,預設info,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ;pid 檔案
nodaemon=false ;是否在前台啟動,預設是false,即以 daemon 的方式啟動
minfds=1024 ;可以打開的檔案描述符的最小值,預設 1024
minprocs=200 ;可以打開的程序數的最小值,預設 200
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock
;通過UNIX socket連接配接supervisord,路徑與unix_http_server部分的file一緻
;serverurl=http://127.0.0.1:9001
; 通過HTTP的方式連接配接supervisord
[program:xx]
; [program:xx]是被管理的程序配置參數,xx是程序的名稱
command=/opt/tomcat/bin/catalina.sh run
; 程式啟動指令
autostart=true ; 在supervisord啟動的時候也自動啟動
startsecs=10 ; 啟動10秒後沒有異常退出,就表示程序正常啟動了,預設為1秒
autorestart=true ; 程式退出後自動重新開機,可選值:[unexpected,true,false],預設為unexpected,表示程序意外殺死後才重新開機
startretries=3 ; 啟動失敗自動重試次數,預設是3
user=tomcat ; 用哪個使用者啟動程序,預設是root
priority=999 ; 程序啟動優先級,預設999,值小的優先啟動
redirect_stderr=true ; 把stderr重定向到stdout,預設false
stdout_logfile_maxbytes=20MB ; stdout 日志檔案大小,預設50MB
stdout_logfile_backups = 20 ; stdout 日志檔案備份數,預設是10
; stdout 日志檔案,需要注意當指定目錄不存在時無法正常啟動,是以需要手動建立目錄(supervisord 會自動建立日志檔案)
stdout_logfile=/opt/apache-tomcat-8.0.35/logs/catalina.out
stopasgroup=false
;預設為false,程序被殺死時,是否向這個程序組發送stop信号,包括子程序
killasgroup=false
;預設為false,向程序組發送kill信号,包括子程序
[include] ;包含其它配置檔案
files = relative/directory/*.ini
;可以指定一個或多個以.ini結束的配置檔案
注:配置檔案中;是注釋
常用指令介紹
supervisord啟動成功後,可以通過supervisorctl用戶端控制程序,啟動、停止、重新開機。運作supervisorctl指令,不加參數,會進入supervisor用戶端的互動終端,并會列出目前所管理的所有程序。
[root@java-test ~]# supervisorctl
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
可以通過help指令檢視相關指令的使用及參數
配置管理程序
下面是配置Tomcat程序的一個例子:
[program:tomcat]
command=/usr/local/tomcat/bin/catalina.sh run
stdout_logfile=/usr/local/tomcat/logs/catalina.out
autostart=true
autorestart=true
startsecs=5
priority=1
stopasgroup=true
killasgroup=true
配置完成後,啟動服務
supervisord -c /etc/supervisor/supervisord.conf
啟動後需要執行下面的操作來更新配置檔案
[root@ ~]# supervisorctl update
[root@ ~]# supervisorctl status
tomcat RUNNING pid 12223, uptime 0:06:31
終端的指令
supervisorctl status
supervisorctl stop tomcat
supervisorctl start tomcat
supervisorctl restart tomcat