Supervisor教程
Supervisor教程
简介
Supervisor:一个基于Python的进程管理工具,采用C/S模式工作。
- 它可以启动、停止、监听进程,并提供Web管理页面。
- 它会监听进程的状态,发现它们挂掉了就立即重启。
- 它不能管理守护进程(daemon),进程必须前台(foreground) 运行
安装:
yum install supervisor
- 在主机上启动:
systemctl start supervisord
- 在容器中启动:
supervisord
-c /etc/supervisord.conf # 使用指定的配置文件
基本用法:
命令行控制端
supervisorctl
supervisorctl -c
/etc/supervisor/supervisord.conf # 使用指定的配置文件supervisorctl start
# 启动某个进程(name为all时会处理配置文件中的所有进程) supervisorctl stop
# 停止某个进程(name为all时会处理配置文件中的所有进程) supervisorctl restart
# 重启某个进程(name为all时会处理配置文件中的所有进程) supervisorctl status # 查看所有进程的状态
supervisorctl update # 重新加载配置文件
supervisorctl reload # 重启supervisord,请不要在容器中操作这个命令
supervisorctl shutdown # 停止supervisord,请不要在容器中操作这个命令
supervisord的主配置文件是/etc/supervisord.conf,还会导入/etc/supervisord.d/目录下的 .ini 文件。
/etc/supervisor/supervisord.conf的主要参数及解释如下
:
[unix_http_server]
file=
/var/run/supervisor/supervisor.sock ; supervisor的sock文件的路径;chmod=0700 ; sock文件的权限(默认0700)
;chown=nobody:nogroup ; sock文件的uid:gid
;username=user ; 用户名(默认无)
;password=123 ; 密码(默认无)
;[inet_http_server] ; Web管理页面
;port=127.0.0.1:9001 ; 设置*:port则监听所有IP来源
;username=user ; 用户名(默认无)
;password=123 ; 密码(默认无)
[include] ; 导入其它配置文件
files = conf.d/*.conf conf.d/*.ini
将进程的配置文件保存为 /etc/supervisord.d/*.ini,主要内容如下。
[program:ping] ; 被管理的进程名
command=/bin/ping 127.0.0.1 ; 该进程的启动命令(注意不能作为守护进程启动)
;directory=/root ; 执行启动命令前要切换到的目录
user=root ; 用哪个用户启动该进程
;numprocs=1 ; 该进程要启动多少个副本
;priority=999 ; 进程启动的优先级,值越小则越优先启动
;autostart=true ; 当supervisord启动时是否自动启动该进程
;autorestart=true ; 当进程意外停止时是否自动重启
;startretries=3 ; 启动失败后的重试次数
;startsecs=1 ; 启动几秒后进程没有异常退出,就视作进程启动成功了
;exitcodes=0,2 ; 进程正常的退出码,如果返回其它退出码则视作异常停止
;stdout_logfile=/var/log/nginx/stdout.log ; stdout日志文件的保存路径(该目录需要已存在)
;stdout_logfile_maxbytes=50MB ; stdout日志文件的最大大小,超出则会循环写入。设置成0则不限制大小。
;stdout_logfile_backups=10 ; stdout日志文件的备份数量。设置成0则不备份
;redirect_stderr=false ; 是否把stderr重定向到stdout
;stderr_logfile=/var/log/nginx/stderr.log ; stderr日志文件的保存路径(该目录需要已存在)
高级用法:
使用系统环境变量方法
通过supervisord.conf配置引入系统变量并重命名,
supervisord.conf
environment中 SSH_AUTOSTART_SSHD="%(ENV_ENABLE_SSHD_WRAPPER)s",SSH_AUTOSTART_SSHD为supervisor环境中的环境变量名,ENV_ENABLE_SSHD_WRAPPER为系统中的环境变量名,%(xxx)s表示取值
/etc/supervisor/supervisord.conf
[supervisord]
environment = SSH_AUTOSTART_SSHD="%(ENV_ENABLE_SSHD_WRAPPER)s",SSH_AUTOSTART_SSHD_BOOTSTRAP="%(ENV_ENABLE_SSHD_BOOTSTRAP)s",SSH_AUTOSTART_SUPERVISOR_STDOUT="%(ENV_ENABLE_SSHD_BOOTSTRAP)s",SSH_TIMEZONE="%(ENV_SYSTEM_TIMEZONE)s"
logfile = /dev/null
logfile_maxbytes = 0
logfile_backups = 0
loglevel = info
minfds = 1024
minprocs = 200
nodaemon = true
pidfile = /var/run/supervisord.pid
user = root
[include]
files = conf.d/*.conf conf.d/*.ini
/etc/supervisor/conf.d/00-supervisor_stdout.conf,留意autostart
[eventlistener:supervisor_stdout]
autostart = %(ENV_ENABLE_SUPERVISOR_STDOUT)s
buffer_size = 100
command = /usr/bin/supervisor_stdout
events = PROCESS_LOG
priority = 1
result_handler = supervisor_stdout:event_handler
startsecs = 0
user = root
/etc/supervisor/conf.d/10-system-timezone-wrapper.conf
[program:system-timezone-wrapper]
autorestart = false
autostart = true
command = /usr/sbin/system-timezone-wrapper --verbose
priority = 10
startretries = 0
startsecs = 0
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0
/etc/supervisor/conf.d/20-sshd-bootstrap.conf,留意autostart
[program:sshd-bootstrap]
autorestart = false
autostart = %(ENV_ENABLE_SSHD_BOOTSTRAP)s
command = /usr/sbin/sshd-bootstrap --verbose
priority = 20
startretries = 0
startsecs = 0
stderr_logfile = /dev/stderr
stderr_logfile_maxbytes = 0
stdout_logfile = /dev/stdout
stdout_logfile_maxbytes = 0