简介:
Supervisor 进程管理工具
一、安装
shell > yum -y install python-pip shell > pip install supervisor # 这样就安装好了,注意:这货不支持 Python 、用 yum 安装也有问题
二、配置
shell > echo_supervisord_conf > /etc/supervisord.conf # 生成配置文件到指定位置,报错的时候卸载原来的包装这个 meld3==0.6.7 [ pkg_resources.DistributionNotFound: meld3>=0.6.5 ] shell > grep -vP '^;|^$' /etc/supervisord.conf [unix_http_server]
file=/var/tmp/supervisor.sock ; .sock 存放位置 [supervisord]
logfile=/var/log/supervisord.log ; .log 存放位置
logfile_maxbytes=50MB ; 每个日志文件最大 50MB
logfile_backups= ; 保留10个备份
loglevel=info ; 日志级别,info,debug,warn,trace
pidfile=/var/run/supervisord.pid ; .pid 存放位置
nodaemon=false ; 守护进程方式启动
minfds= ; 可以打开的文件描述符
minprocs= ; 可以启动的进程数 [rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl]
serverurl=unix:///var/tmp/supervisor.sock ; .sock 存放位置 # 稍微修改了一些默认项
三、启动
shell > supervisord -c /etc/supervisord.conf # 指定配置文件路径 shell > ps aux | grep sup
root 0.0 0.0 ? S : : [sync_supers]
root 0.0 0.1 ? Ss : : /usr/bin/python /usr/bin/supervisord -c /etc/supervisord.conf
四、启动一个自定义脚本
shell > vim hello.sh #!/bin/bash for i in {..};do echo hello; sleep ;done shell > chmod a+x hello.sh
shell > vim /etc/supervisord.conf [program:hello]
directory=/root ; 运行程序时切换到指定目录
command=/bin/bash hello.sh ; 执行程序 ( 程序不能时后台运行的方式 )
redirect_stderr=true ; 标准错误输出重定向到标准输出
stdout_logfile=hello.log ; 指定日志文件路径,可以绝对路径 ( 相对路径 相对 directory= 指定的目录 )
stdout_logfile_maxbytes=50MB ; 文件切割大小
stdout_logfile_backups= ; 保留的备份数 # 加入程序启动配置
shell > supervisorctl supervisor> help default commands (type help <topic>):
=====================================
add exit open reload restart start tail
avail fg pid remove shutdown status update
clear maintail quit reread signal stop version # 客户端工具提供一些指令 ( supervisorctl help 这样运行也是可以的 ) supervisor> update
hello: added process group # 自动重启配置文件发生改变的进程 supervisor> start hello
hello: started supervisor> status
hello RUNNING pid , uptime :: # 反正就是这几个指令,启动后脚本的输出会被记录到 stdout_logfile= 指定的日志文件中 # 现在的情况是,程序执行一次就退出了 supervisor> status
hello EXITED Dec : PM supervisor> exit
shell > vim /etc/supervisord.conf [program:hello]
directory=/root
command=/bin/bash hello.sh
autostart=true ; 程序随 supervisord 启动而启动
startsecs= ; 程序启动 后没有退出,认为程序启动成功
startretries= ; 启动失败重试次数
autorestart=true ; 程序退出后自动启动,false 不启动、unexpected 只有退出状态码为 exitcodes= 指定的值是才自动启动
redirect_stderr=true
stdout_logfile=hello.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups= # 添加一些配置,重新来过 supervisor> update
hello: stopped
hello: updated process group # 注意:这次会时间长一点,因为设置了 startsecs=,也就是说 秒后才能 status 看到进程状态 # 这次程序就会自动重启了
shell > vim /etc/supervisord.conf [program:hello]
directory=/root
command=/bin/bash hello.sh
process_name=%(program_name)s_%(process_num)02d ; 启动多个进程时设置不同的进程名
numprocs= ; 启动几个进程
autostart=true
startsecs=
startretries=
autorestart=true
redirect_stderr=true
stdout_logfile=hello.log
stdout_logfile_maxbytes=50MB
stdout_logfile_backups= # 又加了启动多个进程的配置 supervisor> update
hello: stopped
hello: updated process group supervisor> status
hello:hello_00 RUNNING pid , uptime ::
hello:hello_01 RUNNING pid , uptime :: # 这次长这样了.. supervisor> stop all
hello:hello_00: stopped
hello:hello_01: stopped supervisor> status
hello:hello_00 STOPPED Dec : PM
hello:hello_01 STOPPED Dec : PM # 好了收工!