supervisor 进程管理工具
介绍
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
平台支持
- linux & unix
- python 2.4以上,不支持python 3
以下过程均是在centos7完成
安装
# centos
yum install supervisor
创建配置文件
# 显示示例配置
echo_supervisord_conf
# 生成配置文件
echo_supervisord_conf > /etc/supervisord.conf
服务管理
# 启动
systemctl start supervisord.service
# 关闭
systemctl stop supervisord.service
# 重启
systemctl restart supervisord.service
# 状态
systemctl status supervisord.service
# 开机启动
systemctl enable supervisord.service
supervisorctl
# 进入supervisorctl shell
supervisorctl
# 状态
status
# 启动/关闭/重启一个脚本
start/stop/restart name
# 启动所有脚本
start/stop/restart all
# 重载配置文件(平滑重启)
update
更多命令:http://supervisord.org/running.html#supervisorctl-command-line-options
程序配置
[program:againsendvip]
directory=/data/jop
command=/usr/local/php/bin/php script.php
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor.log
stderr_logfile=/var/log/supervisor_error.log
常用配置项command
:启动程序使用的命令,可以是绝对路径或者相对路径process_name
:一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)snumprocs
:Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1numprocs_start
:一个int偏移值,当启动实例的时候用来计算numprocs的值priority
:权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999autostart
:如果设置为true,当supervisord启动的时候,进程会自动重启。autorestart
:值可以是false、true、unexpected。false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候。startsecs
:程序启动后等待多长时间后才认为程序启动成功startretries
:supervisord尝试启动一个程序时尝试的次数。默认是3exitcodes
:一个预期的退出返回码,默认是0,2。stopsignal
:当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。stopwaitsecs
:在操作系统给supervisord发送SIGCHILD信号时等待的时间stopasgroup
:如果设置为true,则会使supervisor发送停止信号到整个进程组killasgroup
:如果设置为true,则在给程序发送SIGKILL信号的时候,会发送到整个进程组,它的子进程也会受到影响。user
:如果supervisord以root运行,则会使用这个设置用户启动子程序redirect_stderr
:如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符。stdout_logfile
:把进程的标准输出写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会自动选择一个文件位置。stdout_logfile_maxbytes
:标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小stdout_logfile_backups
:标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份stdout_capture_maxbytes
:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GBstdout_events_enabled
:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发stderr_logfile
:把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为truestderr_logfile_maxbytes
:错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小stderr_logfile_backups
:错误日志轮转备份的数量,默认是10,如果设置为0,则不备份stderr_capture_maxbytes
:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GBstderr_events_enabled
:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发environment
:一个k/v对的list列表directory
:supervisord在生成子进程的时候会切换到该目录umask
:设置进程的umaskserverurl
:是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url