Linux配置Supervisor管理程序
Supervisor是由python語言編寫,基於linux作業系統的一款伺服器管理工具,用以監控伺服器的執行,發現問題能立即自動預警及自動重啟等功能。
1、軟體安裝
supervisor
meld(python html模版引擎)
1、通過pip直接安裝。[前提是已經安裝了pip的python工具包]
pip2 install meld3
pip2 install supervisor
2、通過pypi官網下載:
meld3:
Supervisor:
下載解壓,分別執行python setup.py install安裝
2、配置
1、建立配置檔案
echo_supervisord_conf > /etc/supervisord.conf
2、修改配置檔案
# 增加web監控服務
[inet_http_server] ; inet (TCP) server disabled by default
port=0.0.0.0:9001 ; (ip_address:port specifier, *:port for all iface)
username=user ; (default is no username (open server))
password=123 ; (default is no password (open server))
3、啟動監控
/usr/bin/supervisord -c /etc/supervisord.conf
訪問瀏覽器ip:9001
4、配置supervisord的開機啟動和管理指令碼
首先關掉supervisord服務:
ps aux | grep supervisord
找到程序後kill -9 pid 否則一下配置指令碼不生效。
vi /etc/init.d/supervisord
#!/bin/sh
#
# /etc/init.d/supervisord
#
# Supervisor is a client/server system that
# allows its users to monitor and control a
# number of processes on UNIX-like operating
# systems.
#
# chkconfig: - 64 36
# description: Supervisor Server
# processname: supervisord
# Source init functions
. /etc/rc.d/init.d/functions
prog="supervisord"
prefix="/usr"
exec_prefix="${prefix}"
prog_bin="${exec_prefix}/bin/supervisord"
PIDFILE="/var/run/$prog.pid"
start()
{
echo -n $"Starting $prog: "
###注意下面這一行一定得有-c /etc/supervisord.conf 不然修改了配置檔案根本不生效!
daemon $prog_bin -c /etc/supervisord.conf --pidfile $PIDFILE
[ -f $PIDFILE ] && success $"$prog startup" || failure $"$prog startup"
echo
}stop()
{
echo -n $"Shutting down $prog: "
[ -f $PIDFILE ] && killproc $prog || success $"$prog shutdown"
echo
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status $prog
;;
restart)
stop
start
;;
*)
echo "Usage: $0 {start|stop|restart|status}"
;;
esac
然後加入啟動項
chmod +x /etc/init.d/supervisord
chkconfig --add supervisord
chkconfig supervisord on
service supervisord start
####
這樣就可以通過service supervisord start | stop |restart 來管理supervisord了。
5、監控服務
# 增加監控程式
[program:tail1]
command=tail -f /opt/access.log ;常駐後臺的命令
autostart=true ;是否隨supervisor啟動
autorestart=true ;是否在掛了之後重啟,意外關閉後會重啟,比如kill掉!
startretries=3 ;啟動嘗試次數
stderr_logfile=/tmp/tail1.err.log ;標準輸出的位置
stdout_logfile=/tmp/tail1.out.log ;標準錯誤輸出的位置
# 也可以監控目錄下配置檔案,監控/etc/supervisord.d/目錄下conf字尾檔案,conf中配置監控程式
[include]
files=/etc/supervisord.d/*.conf
6、新增flume支援
在/etc/supervisord.conf裡
新增:
[include]
files=/etc/supervisord.d/*.conf
mkdir /etc/supervisord.d
vi /etc/supervisord.d/flume.conf
[program:flume]
command=sh /opt/apache-flume/bin/flume-ng agent --conf /opt/apache-flume/conf/ -f /opt/apache-flume/conf/busi.conf -n busi
autostart=true ;是否隨supervisor啟動
autorestart=true ;是否在掛了之後重啟,意外關閉後會重啟,比如kill掉!
startretries=3 ;啟動嘗試次數
stderr_logfile=/tmp/flume.err.log ;標準輸出的位置
stdout_logfile=/tmp/flume.out.log ;標準錯誤輸出的位置
重啟服務即可。
7、Kafka支援:
/etc/supervisord.d/kafka.conf
[program:kafka]
command=/bin/bash -c 'source /etc/profile && /home/kafka/kafka/bin/kafka-server-start.sh /home/kafka/kafka/config/server.properties'
user=kafka
autostart=true
autorestart=true
startretries=3
directory=/home/kafka/kafka/
stderr_logfile=/home/kafka/kafka/kafka.err.log
stderr_logfile_maxbytes=1MB
stdout_logfile=/home/kafka/kafka/kafka.out.log
stdout_logfile_maxbytes=1MB
8、supervisorctl管理程式程序
1、更新新的配置到supervisord
supervisorctl update
2、重新啟動配置中的所有程式
supervisorctl reload
3、啟動某個程序(program_name=你配置中寫的程式名稱)
supervisorctl start program_name
4、檢視正在守候的程序
supervisorctl
5、停止某一程序 (program_name=你配置中寫的程式名稱)
pervisorctl stop program_name
6、重啟某一程序 (program_name=你配置中寫的程式名稱)
supervisorctl restart program_name
7、停止全部程序
supervisorctl stop all
使用普通使用者執行supervisorctl status會提示如下錯誤
error: <class 'socket.error'>, [Errno 13] Permission denied: file: /usr/local/lib/python2.7/socket.py line: 228
在Permession denied error when use supervisorctl #173裡找到如下解決辦法
[unix_http_server]
file=/tmp/supervisor.sock ; (the path to the socket file)
chmod=0766 ; socket file mode (default 0700)
就是修改sock的許可權