Linux配置supervisor管理进程

概述

Supervisor是由python语言编写,基于linux操作系统的一款服务器管理工具,
用以监控服务器的运行,发现问题能立即自动预警及自动重启等功能。

基础环境

  • Centos 6.5
  • Python 2.6.6

软件安装

  • supervisor
  • meld(python html模版引擎)

下载地址:

meld3 http://www.plope.com/software/meld3/meld3-0.6.5.tar.gz

supervisor

http://pypi.python.org/packages/source/s/supervisor/supervisor-3.0b1.tar.gz

下载解压,分别执行python setup.py install安装

文件配置

  1. 创建配置文件
1
echo_supervisord_conf > /etc/supervisord.conf
  1. 修改配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# 增加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))

# 增加监控程序
[program:tail1]
command=tail -f /etc/supervisord.conf ;常驻后台的命令
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

启动监控

1
/usr/bin/supervisord -c /etc/supervisord.conf

访问浏览器ip:9001

supervisorctl管理程序进程

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# 查询状态
upervisorctl status
# 开启服务
supervisorctl start hello
# 关闭服务
supervisorctl stop hello

# 示例

# 停止某一个进程(programxxx),programxxx为[program:chatdemon]里配置的值,这个示例就是programname
supervisorctl stop programname
# 启动某个进程
supervisorctl start programname
# 重启某个进程
supervisorctl restart programname
# 重启所有属于名为groupworker这个分组的进程(start,restart同理)
supervisorctl stop groupworker
# 停止全部进程,注:start、restart、stop都不会载入最新的配置文件
supervisorctl stop all
# 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程
supervisorctl reload
根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启
supervisorctl update,

增加程序启动停止脚本

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/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

然后加入启动项呗

1
2
3
4
chmod +x /etc/init.d/supervisord
chkconfig --add supervisord
chkconfig supervisord on
service supervisord start

这样可以通过/etc/init.d/supervisord start | stop |restart 来管理supervisord

参考内容:http://supervisord.org/

概述

Flume为数据采集工具,但缺乏监控工具,Flume进程的状态不能实时看到,且进程停止不回自动重启,可以利用Supervisor来完成这些工作。

安装配置Supervisor

参考文章 http://infullstack.com/linux_supervisor.html

配置/etc/supervisord.conf

1
2
3
4
5
6
7
8
9
10
11
12
[program:flume] 
command=sh /usr/lib/flume/bin/flume-ng agent --conf /usr/lib/flume/conf/ -f /usr/lib/flume/conf/flume.conf -n agent1 -Dflume.root.logger=INFO,console
autostart=true ;是否随supervisor启动
autorestart=true ;是否在挂了之后重启,意外关闭后会重启,比如kill掉!
startretries=3 ;启动尝试次数
stderr_logfile=/tmp/flume.err.log ;标准输出的位置
stdout_logfile=/tmp/flume.out.log ;标准错误输出的位置


# 也可以监控目录下配置文件,监控/etc/supervisord.d/目录下conf后缀文件,conf文件中配置监控上述内容
[include]
files=/etc/supervisord.d/*.conf

备注

程序不需要提前启动,supervisor启动的时候会启动Flume