介绍
Supervisor(http://supervisord.org/)是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具,不支持Windows系统。它可以很方便的监听、启动、停止、重启一个或多个进程。用Supervisor管理的进程,当一个进程意外被杀死,supervisort监听到进程死后,会自动将它重新拉起,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。
安装
- 确认系统版本,建议使用centos7/ubuntu 16.04LTS 等等。。。
Debian/Ubuntu…
apt install supservisor
Centos/Red hat
yum install epel-release
yum install supervisor
配置
安装完成后, 默认会在/etc 目录下生成supervisord.conf 配置文件 和supervisord.d 目录
如果没有,请先创建
supervisord.conf
echo_supervisord_conf > /etc/supervisord.conf
和supervisor.d文件夹
mkdir supervisord.d
编辑supervisord.conf文件
vim supervisord.conf
;将下面的注释去掉,打开webui的管理
;[inet_http_server] ; inet (TCP) server disabled by default
;port=127.0.0.1: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))
[supervisorctl]
serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL for a unix socket
;serverurl=http://127.0.0.1:9001 ; use an http:// url to specify an inet socket
;如果设置username,那么和上面的设置相同
;username=chris ; should be same as http_username if set
;如果设置password,那么和上面的设置相同
;password=123 ; should be same as http_password if set
;prompt=mysupervisor ; cmd line prompt (default "supervisor")
;history_file=~/.sc_history ; use readline history if available
;这里是重点,要包括你刚刚创建的supervised.d文件夹里面的ini文件,如果没有请自己添加
[include]
files = supervisord.d/*.ini
在superiord.d 文件夹中添加ini文件,比如test.ini
vim supervisord.d/test.ini
;theprogramname 是你以后要管理的程序名称
[program:theprogramname]
; 这是你要运行的命令,支持参数,推荐使用绝对路径
command=/bin/cat
; 进程名称,不知道可以不要写process_name expr (default %(program_name)s)
;process_name=%(program_name)s
; 进程复制数量,默认为1 ,不要动就好number of processes copies to start (def 1)
;numprocs=1
;在执行之前预先切换到的目录,不知道可以不写
;directory=/tmp ; directory to cwd to before exec (def no cwd)
;umask=022 ; umask for process (default None)
;优先级,保持默认就好
;priority=999 ; the relative start priority (default 999)
;supervisord守护线程启动的时候是否启动,默认为是
;autostart=true ; start at supervisord start (default: true)
;挂了是否自动重启,默认为是
;autorestart=true ; retstart at unexpected quit (default: true)
;持续运行多少秒认为是启动成功了
;startsecs=10 ; number of secs prog must stay running (def. 1)
;默认挂掉的时候的重启次数
;startretries=3 ; max # of serial start failures (default 3)
;期望的返回值,默认为0,不要动就好
;exitcodes=0,2 ; 'expected' exit codes for process (default 0,2)
;希望它停止的时候要向它发出的信号量
;stopsignal=QUIT ; signal used to kill process (default TERM)
;当停止程序的时候等待多少秒后才认为是停止失败了
;stopwaitsecs=10 ; max num secs to wait b4 SIGKILL (default 10)
;以什么用户启动
;user=chrism ; setuid to this UNIX account to run the program
;是否重定向stderr
;redirect_stderr=true ; redirect proc stderr to stdout (default false)
;输出日志位置
;stdout_logfile=/a/path ; stdout log path, NONE for none; default AUTO
;最大日志文件大小,超出后会分隔
;stdout_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;最大保留
;stdout_logfile_backups=10 ; # of stdout logfile backups (default 10)
;在屏幕输出模式时的最大输出大小
;stdout_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;当输出写入文件的时候是否给出一个事件
;stdout_events_enabled=false ; emit events on stdout writes (default false)
;stderr_logfile=/a/path ; stderr log path, NONE for none; default AUTO
;stderr_logfile_maxbytes=1MB ; max # logfile bytes b4 rotation (default 50MB)
;stderr_logfile_backups=10 ; # of stderr logfile backups (default 10)
;stderr_capture_maxbytes=1MB ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false ; emit events on stderr writes (default false)
;预设环境变量
;environment=A=1,B=2 ; process environment additions (def no adds)
;serverurl=AUTO ; override serverurl computation (childutils)
以上是详细解释,下面看一个正经的文件应该包含哪些内容
app.ini
[program:tomcat]
command=/opt/tomcat/bin/catalina.sh
numprocs=1
;supervisord守护线程启动的时候是否启动,默认为是
autostart=true
;挂了是否自动重启,默认为是
autorestart=true
;默认挂掉的时候的重启次数
startretries=3
;以什么用户启动
user=tomcat
;日志文件位置
stdout_logfile=/var/log/tomcat.log
;最大日志文件大小,超出后会分隔
stdout_logfile_maxbytes=10MB
;最大保留
stdout_logfile_backups=10
一般这些文件足够了
启动
配置完毕后,启动supervisor服务
service supervisord start
supervisorctl restart xxxx
#这里的xxxx是你刚刚配置的programname