Supervisor安装及使用

Supervisor安装及使用

1. 简介

Supervisor( supervisord.org )是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

supervisor组件构成:

  • supervisord(server 部分):主要负责管理子进程,响应客户端命令以及日志的输出等;
  • supervisorctl(client 部分):命令行客户端,用户可以通过它与不同的 supervisord 进程联系,获取子进程的状态等。
  • Web Server主要可以在界面上管理进程,Web Server其实是通过XML_RPC来实现的,可以向supervisor请求数据,也可以控制supervisor及子进程。配置在[inet_http_server]块里面;
  • XML_RPC接口 : 提供了与webserver中相同的用于查询和控制进程的http接口;

2. 安装

2.1 安装软件

#centos6
1、 yum install supervisor #版本较低 2.1-9.el6  
2、 pip2.7 install supervisor #version 4.0.2
#centos7 
yum install supervisor  #版本supervisor-3.4.0

$supervisord --version 
4.0.2
复制代码

2.2 生成配置模板

生成配置文件:

echo_supervisord_conf > /etc/supervisord.conf
mkdir /etc/supervisord.conf.d/ ##存放每个进程的配置文件
复制代码

有时会出错可以如下处理:

1.生成配置出错了
$echo_supervisord_conf > /etc/supervisord.conf
Traceback (most recent call last):
File "/usr/local/python-2.7/bin/echo_supervisord_conf", line 5, in <module>
from pkg_resources import load_entry_point
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 2603, in <module>
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 666, in require
File "build/bdist.linux-x86_64/egg/pkg_resources.py", line 565, in resolve
pkg_resources.DistributionNotFound: meld3>=0.6.5

2.处理方法:
$pip install setuptools
$pip install setuptools --upgrade
3、生成配置文件
$echo_supervisord_conf > /etc/supervisord.conf
$mkdir /etc/supervisord.conf.d/ ##存放每个进程的配置文件
复制代码

2.3 管理界面

可以配置 supervisrod 启动 web 管理界面,这个 web 后台使用 Basic Auth 的方式进行身份认证。 编辑配置文件/etc/supervisord.conf,添加inet_http_server节点,如下:

vim supervisord.conf
[inet_http_server] ; inet (TCP) server disabled by default
port=192.xx.xx.xx: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))
其中,port是服务监听端口信息,username是管理员用户名,password是管理员密码。
复制代码

2.4 配置参考

最终配置参考:

cat supervisord.conf  |grep -v '^;' |grep -v '^$'
[unix_http_server]
file=/tmp/supervisor.sock   ; the path to the socket file

[inet_http_server]         ; inet (TCP) server disabled by default
port=192.168.106.101:9001        ; ip_address:port specifier, *:port for all iface
username=admin              ; default is no username (open server)
password=admin123               ; default is no password (open server)

[supervisord]
logfile=/tmp/supervisord.log ; main log file; default $CWD/supervisord.log
logfile_maxbytes=50MB        ; max main logfile bytes b4 rotation; default 50MB
logfile_backups=3           ; # of main logfile backups; 0 means none, default 10
loglevel=info                ; log level; default info; others: debug,warn,trace
pidfile=/tmp/supervisord.pid ; supervisord pidfile; default supervisord.pid
nodaemon=false               ; start in foreground if true; default false
minfds=1024                  ; min. avail startup file descriptors; default 1024
minprocs=200                 ; min. avail process descriptors;default 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 = /etc/supervisord.conf.d/*.conf
复制代码

3. 启动及常用命令

3.1 启动/停止

#启动
service supervisord start
#停止
service supervisord stop
复制代码

3.2 常用命令

可以使用以下命令更新配置、更新进程、查看状态

# 读取有更新(增加)的配置文件,不会启动新添加的程序 
$supervisorctl reread
 # 重启配置文件修改过的程序 
$supervisorctl update
 # 查看程序状态 
$supervisorctl status
 # 启动程序 App_name 
$supervisorctl start App_name
 # 关闭程序 App_name 
$supervisorctl stop App_name
 # 重启程序 App_name 
supervisorctl -c /etc/supervisord.conf restart App_name:    
supervisorctl -c /etc/supervisord.conf start App_name:App_name_01
#supervisord **重载配置要用update ,不要用reload!

$supervisorctl restart App_name
以上命令也可以在supervisorctl Shell中执行:
$supervisorctl
supervisor>reread
supervisor> update
supervisor> status
supervisor> start App_name
supervisor> stop App_name
supervisor> restart App_name
复制代码

4. supervisor管理应用

4.1 修改配置文件

把应用进程的配置文件都放在/etc/supervisord.conf.d目录。 1、修改supervisord的配置文件 修改/etc/supervisord.conf的内容如下:

vim /etc/supervisord.conf
[include]
;files = relative/directory/*.ini
files = /etc/supervisord.conf.d/*.conf

复制代码

4.2 编辑应用配置文件

假定要对MySQL3307及Web服务进行管理。

  • MySQL应用配置: /etc/supervisord.conf.d/mysql3307.conf
  • Web应用配置: /etc/supervisord.conf.d/app.conf

1)MySQL应用配置:

$mkdir /etc/supervisord.conf.d/
$vim /etc/supervisord.conf.d/mysql3307.conf
[program:mysql3307]
directory = /data1/
command = /usr/local/mysql/bin/mysqld_safe --defaults-file=/data1/mysql3307/etc/my.cnf &
priority=1
numprocs=1
autostart=true
autorestart=true
stdout_logfile=/etc/supervisord.conf.d/mysql3307.log
startretries = 3
redirect_stderr = true
stopwaitsecs=2
复制代码

2)Web应用配置:

配置Web的supervisor管理,配置文件名为/etc/supervisord.conf.d/app.conf

[program:App_name]
directory = /data1/workspace/App_name/main ; 程序的启动目录
command = /usr/local/python-2.7/bin/python ./api_main.py --port=78%(process_num)02d  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
process_name=%(program_name)s_%(process_num)02d ; 
numprocs=4
numprocs_start=1
autostart = true     ; 在 supervisord 启动的时候也自动启动
startsecs = 5        ; 启动 5 秒后没有异常退出,就当作已经正常启动了
autorestart = true   ; 程序异常退出后自动重启
startretries = 3     ; 启动失败自动重试次数,默认是 3
redirect_stderr = true  ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB  ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 5     ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /etc/supervisord.conf.d/App_name.log
stopwaitsecs=2
复制代码

4.3 启动supervisord

$service supervisord start

#重载配置要用update ,不要用reload,否则原应用服务会中止。
supervisorctl update  (用此命令)
复制代码

说明: supervisord重载配置要用update ,不要用reload!

4.4 查看进程状态

查看进程状态,如下:

$supervisorctl status
App_name:App_name_01                   RUNNING   pid 11876, uptime 0:00:24
App_name:App_name_02                   RUNNING   pid 11878, uptime 0:00:24
App_name:App_name_03                   RUNNING   pid 11877, uptime 0:00:24
App_name:App_name_04                   RUNNING   pid 11879, uptime 0:00:24


复制代码

5. 开机自启动

1)创建/etc/init.d/supervisord文件

#创建/etc/init.d/supervisord文件
vim  /etc/init.d/supervisord
#!/bin/sh  
#  
# /etc/rc.d/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/init.d/functions  
  
RETVAL=0  
prog="supervisord"  
pidfile="/tmp/supervisord.pid"  
lockfile="/var/lock/subsys/supervisord"  
  
start()  
{  
        echo -n $"Starting $prog: "  
        daemon --pidfile $pidfile /usr/local/python-2.7/bin/supervisord -c /etc/supervisord.conf  
        RETVAL=$?  
        echo  
        [ $RETVAL -eq 0 ] && touch ${lockfile}  
}  
  
stop()  
{  
        echo -n $"Shutting down $prog: "  
        killproc -p ${pidfile} /usr/bin/supervisord  
        RETVAL=$?  
        echo  
        if [ $RETVAL -eq 0 ] ; then  
                rm -f ${lockfile} ${pidfile}  
        fi  
}  
  
case "$1" in  
  
  start)  
    start  
  ;;  
  
  stop)  
    stop  
  ;;  
  
  status)  
        status $prog  
  ;;  
  
  restart)  
    stop  
    start  
  ;;  
  
  *)  
    echo "Usage: $0 {start|stop|restart|status}"  
  ;;  
  
esac  
复制代码

2)设置为服务,如下的方法

chmod +x /etc/init.d/supervisord
chkconfig --add supervisord
chkconfig supervisord on
复制代码

3)执行命令

# Start the service
service supervisord start
# Stop the service
service supervisord stop
# Restart the service
service supervisord restart
复制代码

参考:

分类:
阅读
标签: