環(huán)境:python2,centos6.8
1.首先安裝easy_install:wget --no-check-certificate https://bootstrap.pypa.io/ez_setup.py
python ez_setup.py --insecure
執(zhí)行:easy_install -d app/supervisor supervisor (app/supervisor為安裝目錄)
如果報錯:>TEST FAILED: /app/zpy/supervisor does NOT support .pth files
>error: bad install directory or PYTHONPATH
> You can add the installation directory to the PYTHONPATH environment
? variable.? (It must then also be on PYTHONPATH whenever you run
? Python and want to use the package(s) you are installing.)
解決:我們可以根據(jù)要求去設置環(huán)境變量
vim /etc/profile
export PYTHONPATH=/app/supervisor
source /etc/profile
繼續(xù)安裝:easy_install -d app/supervisor supervisor 夭问,提示安裝成功
生成配置文件:./echo_supervisord_conf > /app/supervisor/supervisord.conf
查看supervisor目錄結(jié)構(gòu)為:
[root@zk-kafka001 supervisor]# ll
total 48
-rw-r--r-- 1 root root? 238 Feb 20 12:11 easy-install.pth
-rwxr-xr-x 1 root root? 338 Feb 20 12:11 echo_supervisord_conf
drwxr-xr-x 4 root root 4096 Feb 20 12:11 meld3-1.0.2-py2.6.egg
-rwxr-xr-x 1 root root? 312 Feb 20 12:11 pidproxy
-rw-r--r-- 1 root root 2362 Feb 20 12:11 site.py
-rw-r--r-- 1 root root 1745 Feb 20 12:11 site.pyc
drwxr-xr-x 4 root root 4096 Feb 20 12:11 supervisor-3.3.1-py2.6.egg
-rwxr-xr-x 1 root root? 322 Feb 20 12:11 supervisorctl? #這是客戶端
-rwxr-xr-x 1 root root? 318 Feb 20 12:11 supervisord? ? #這是服務端
-rw-r--r-- 1 root root 8658 Feb 20 12:21 supervisord.conf #這是配置文件
建議在操作時候最好泽西,先備份原始的配置文件
mv supervisord.conf supervisor.conf.bak
新建supervisord.conf中配置:
[unix_http_server]
file=/tmp/supervisor.sock? ; (the path to the socket file)
[inet_http_server]? ? ? ? ; HTTP 服務器,提供 web 管理界面
port=10.0.150.34:9001? ? ? ; Web 管理后臺運行的 IP 和端口缰趋,如果開放到公網(wǎng)捧杉,需要注意安全性
username=admin? ? ? ? ? ? ; 登錄管理后臺的用戶名
password=1qaz@WSX?? ? ? ? ; 登錄管理后臺的密碼
[supervisord]
logfile=/tmp/supervisord.log ; 日志文件,默認是 $CWD/supervisord.log
logfile_maxbytes=50MB? ? ? ? ; 日志文件大小秘血,超出會 rotate味抖,默認 50MB
logfile_backups=10? ? ? ? ? ; 日志文件保留備份數(shù)量默認 10
loglevel=info? ? ? ? ? ? ? ? ; 日志級別,默認 info灰粮,其它: debug,warn,trace
pidfile=/tmp/supervisord.pid ; pid 文件
nodaemon=false? ? ? ? ? ? ? ; 是否在前臺啟動仔涩,默認是 false,即以 daemon 的方式啟動
minfds=1024? ? ? ? ? ? ? ? ? ; 可以打開的文件描述符的最小值谋竖,默認 1024
minprocs=200? ? ? ? ? ? ? ? ; 可以打開的進程數(shù)的最小值红柱,默認 200
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL? for a unix socket
; 包含其他的配置文件
[include]
files = /app/zpy/supervisor/etc/*.conf? ? ; 可以是 *.conf 或 *.ini
下邊我們拿es和tomcat舉個例子:
在/app/supervisor/etc/ 下創(chuàng)建一個tomcat.conf ,當前服務是xiaov用戶啟動的蓖乘,配置如下
[program:tomcat]
directory = /app/tomcat/bin/ ; 程序的啟動目錄锤悄,
command = sh startup.sh? ; 啟動命令,可以看出與手動在命令行啟動的命令是一樣的
autostart = true? ? ; 在 supervisord 啟動的時候也自動啟動
startsecs = 5? ? ? ? ; 啟動 5 秒后沒有異常退出嘉抒,就當作已經(jīng)正常啟動了
autorestart = true? ; 程序異常退出后自動重啟
startretries = 3? ? ; 啟動失敗自動重試次數(shù)零聚,默認是 3
user = xiaov? ? ? ? ? ; 用哪個用戶啟動
redirect_stderr = true? ; 把 stderr 重定向到 stdout,默認 false
stdout_logfile_maxbytes = 20MB? ; stdout 日志文件大小些侍,默認 50MB
stdout_logfile_backups = 20? ? ; stdout 日志文件備份數(shù)
; stdout 日志文件隶症,需要注意當指定目錄不存在時無法正常啟動,所以需要手動創(chuàng)建目錄(supervisord 會自動創(chuàng)建日志文件)
stdout_logfile = /app/zpy/supervisor/usercenter_stdout.log
要保證tomcat的目錄xiaov用戶有權(quán)限岗宣,修改權(quán)限蚂会,chown -R xiaov:xiaov tomcat
新建es.conf,注意es是非root用戶啟動
[program:es]
directory = /server/soft/elasticsearch ; 程序的啟動目錄
command = /server/soft/elasticsearch/bin/elasticsearch? ; 啟動命令耗式,可以看出與手動在命令行啟動的命令是一樣的
autostart = true? ? ; 在 supervisord 啟動的時候也自動啟動
startsecs = 5? ? ? ? ; 啟動 5 秒后沒有異常退出胁住,就當作已經(jīng)正常啟動了
autorestart = true? ; 程序異常退出后自動重啟
startretries = 3? ? ; 啟動失敗自動重試次數(shù),默認是 3
user = king? ? ? ? ? ; 用哪個用戶啟動
redirect_stderr = true? ; 把 stderr 重定向到 stdout刊咳,默認 false
stdout_logfile_maxbytes = 20MB? ; stdout 日志文件大小彪见,默認 50MB
stdout_logfile_backups = 20? ? ; stdout 日志文件備份數(shù)
; stdout 日志文件,需要注意當指定目錄不存在時無法正常啟動娱挨,所以需要手動創(chuàng)建目錄(supervisord 會自動創(chuàng)建日志文件)
stdout_logfile = /app/supervisor/usercenter_stdout.log
使用Supervisord監(jiān)控管理的進程必須以nodaemon啟動余指,即不能為后臺守護進程。而tomcat的startup.sh腳本是daemon方式的跷坝,所以需要更改配置文件酵镜。
vim /opt/tomcat_app/bin/startup.sh
(將start改為run)
exec "$PRGDIR"/"$EXECUTABLE" run "$@"?
啟動服務:supervisord -c supervisord.conf
立刻生效:supervisorctl
進入shell界面:supervisorctl -c supervisord.con
> status # 查看程序狀態(tài)
> stop tomcat? # 關閉 tomcat 程序? ?
> start tomcat? # 啟動 tomcat 程序? ?
> restart tomcat? ? # 重啟 tomcat 程序? ?
> reread? ? # 讀取有更新(增加)的配置文件碉碉,不會啟動新添加的程序? ?
> update? ? # 重啟配置文件修改過的程序
除了進入 supervisorctl 的 shell 界面,也可以直接在 bash 終端運行
supervisorctl status
supervisorctl stop usercenter? ?
supervisorctl start usercenter? ?
supervisorctl restart usercenter? ?
supervisorctl reread? ?
supervisorctl update
web登錄管理方式:
http://10.0.150.34:9001,可以通過頁面查看服務的日志
經(jīng)過測試笋婿,在遇到重啟機器誉裆,kill的時候會自動拉起服務,調(diào)用啟動腳本