[toc]
安装Supervisor
安装python安装工具pip
下载get-pip.py 文件
wget https://bootstrap.pypa.io/get-pip.py --no-check-certificate
执行安装
python get-pip.py
如果 安装完成pip 命令不能使用,搜索系统中pip文件,创建命令链接
ln -s /usr/local/python27/bin/pip /usr/bin/pip
安装supervisord
pip install supervisor
安装后会出现两个命令
/usr/bin/supervisord -- supervisor 服务守护进程
/usr/bin/supervisorctl -- supervisor 控制台进程
测试安装是否成功
echo_supervisord_conf
创建配置文件
mkdir -p /etc/supervisor
mkdir -m 755 -p /etc/supervisor/
echo_supervisord_conf > /etc/supervisord.conf #生成默认配置文件
sed -i "s/\;\[include\]/\[include\]/" /etc/supervisord.conf
echo "files = /etc/supervisor/*.conf" >> /etc/supervisord.conf
启动supervisor
运行:supervisord
查看进程是否运行:ps -ef|grep supervisor
查看任务状态:supervisorctl
Centos7 创建服务
cat > /usr/lib/systemd/system/supervisord.service << EOF
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s
SysVStartPriority=99
[Install]
WantedBy=multi-user.target
EOF
systemclt enable supervisord
Centos6 创建服务
cat > /etc/init.d/supervisord << EOF
#!/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/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: "
daemon $prog_bin --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
EOF
chmod +x /etc/init.d/supervisord
chkconfig --add supervisord
chkconfig supervisord --level 2345 on
任务配置
在etc/supervisor/
目录下创建一个 .conf
的文件(可以直接写入到supervisor.conf文件中,推荐在supervisor目录下新建一个任务配置文件)
vi /etc/supervisor/tomcat8801
[program:tomcat8801]
command=/opt/tomcat/bin/catalina.sh run
environment=JAVA_HOME="/usr/local/jdk/",JAVA_BIN="/usr/local/jdk/bin"
directory=/opt/tomcat
autostart = true
autorestart=true
redirect_stderr=true
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
.conf
文件参数说明
command= 启动命令
environment= 运行环境
directory= 软件主目录
stdout_logfile= 日志文件位置
;autostart = true ; 在 supervisord 启动的时候也自动启动
;startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了
;autorestart = true ; 程序异常退出后自动重启
;startretries = 3 ; 启动失败自动重试次数,默认是 3
;user = leon ; 用哪个用户启动
;redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
;stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
;stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH
任务管理
supervisorctl 命令进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了
status # 查看程序状态
stop usercenter # 关闭 usercenter 程序
start usercenter # 启动 usercenter 程序
restart usercenter # 重启 usercenter 程序
reload # 读取有更新(增加)的配置文件,不会启动新添加的程序
update # 重启配置文件修改过的程序
管理nginx
[program:up_nginx]
command=/usr/sbin/nginx
process_name=%(program_name)s
numprocs=4 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启。。当然要选上了
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout
管理tomcat
[program:ucaction_pre]
command=/mnt/data/tomcat_uc/bin/catalina.sh run
environment=JAVA_HOME="/usr/local/jdk/",JAVA_BIN="/usr/local/jdk/bin"
directory=/mnt/data/tomcat_uc ; first change to the dir and exec the command
autostart = true
autorestart = true
stopsignal=QUIT
stopasgroup=true ;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
killasgroup=true ;默认为false,向进程组发送kill信号,包括子进程
redirect_stderr=true ; 把stderr重定向到stdout,默认false
stdout_logfile_maxbytes=50MB ; stdout 日志文件大小,默认50MB
stdout_logfile_backups = 10 ; stdout 日志文件备份数,默认是10
stdout_logfile = /mnt/logs/tomcat_uc/catalina.out
zookeeper
supervisord.conf 配置文件详解
[inet_http_server] ; 开启TCP/IP http 服务器
port=192.168.18.10:9001 ; 侦听端口
username=user ; 认证用户名
password=123 ; 密码
[supervisord]
logfile=/tmp/supervisord.log ; 日志输出文件
logfile_maxbytes=50MB ; 日志最大空间
logfile_backups=10 ; 日志轮转保留数
loglevel=info ; (日志等级; default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (pid文件; default supervisord.pid)
nodaemon=false ; (前台运行 ;default false)
minfds=1024 ; (最小文件描述符数 ;default 1024)
minprocs=200 ; (最小进程数 ;default 200)
[rpcinterface:supervisor] ; rpc 接口
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl] ; 控制台设置
erverurl=unix:///tmp/supervisor.sock ; socket 访问路径
serverurl=http://192.168.18.10:9001 ; URL 访问路径
username=user ; 使用的认证用户名 (上同)
password=123 ; 密码
prompt=mysupervisor ; cmd line prompt (default "supervisor")
history_file=~/.sc_history ; use readline history if available
[program:nginx]
command=/usr/local/nginx/sbin/nginx -c /etc/nginx/nginx.conf ; 程序路径
directory=/tmp ; 切换到目录
user=www-data ; 执行程序的用户
autorestart=true ; 自动重启
priority=999 ; 优先级
startsecs=1 ; 重启前等待时间
startretries=100 ; 最大重启次数
stdout_logfile=/tmp/supervisor/nginx/nginx.log ; 日志文件
stdout_logfile_maxbytes=10MB ; 日志文件最大容量
stderr_logfile=/tmp/supervisor/nginx/nginx_err.log ; 错误日志文件
stderr_logfile_maxbytes=1MB ; 错误日志文件最大容量