安装supervisor
#centos
yum install supervisor
配置目录地址
/etc/supervisord.d #目录存放任务配置文件
/etc/supervisord.conf #目录存放supervisor配置文件
运行supervisor服务
systemctl start supervisord
可以使用 supervisorctl
命令在控制面板查看当前运行的任务
# 控制面板操作
supervisor> restart app # 重启任务 app任务名, 任务文件.ini中设置的 [program:app]
supervisor> stop app # 停止任务
supervisor> update app # 启动app
supervisor> status app # 查看状态
supervisor> exit # 退出
supervisor> help # 一共这么多命令
default commands (type help <topic>):
=====================================
add clear fg open quit remove restart start stop update
avail exit maintail pid reload reread shutdown status tail version
配置文件说明
[program:cat] # 名为cat的program配置如下
command=/bin/cat # 程序启动时的命令
process_name=%(program_name)s # 进程名称
numprocs=1 # 开几个进程处理
numprocs_start=0 # 用于计算 numprocs 开始的数字的整数偏移量
directory=/tmp # 一个文件路径,表示在执行子代之前 supervisord 应暂时chdir的目录。
umask=022 # 进程新建文件、目录的权限会受到umask的影响,umask表示要减掉的权限(default None)
priority=999 # 程序在启动和关闭顺序中的相对优先级。
autostart=true # 如果为true,则在启动supervisord时,此程序将自动启动,默认为true
autorestart=unexpected # # 指定如果 supervisord 处于 RUNNING 状态时,如果它退出,则 supervisord 是否应自动重新启动该进程
startsecs=10 # 启动后,程序需要保持运行以考虑启动成功(将进程从 STARTING 状态移动到 RUNNING 状态)的总秒数
startretries=3 # 在放弃并将过程置于 FATAL 状态之前,尝试启动程序时,supervisord 将允许的串行故障尝试次数
exitcodes=0,2 # 与 autorestart 一起使用的此程序的“预期”退出代码列表。
stopsignal=TERM # 请求停止时用于终止程序的信号
stopwaitsecs=10 # 在程序发送一个停止信号后等待操作系统将SIGCHLD返回到 supervisord 的秒数
stopasgroup=false # 如果为真,则该标志使管理程序向整个进程组发送停止信号,并暗示 killasgroup 为真。
killasgroup=false # 如果为true,当使用发送SIGKILL到程序终止它发送它到整个进程组,照顾它的孩子,以及有用的,例如使用 multiprocessing 的Python程序。
user=chrism # 指示 supervisord 将此UNIX用户帐户用作运行程序的帐户。
redirect_stderr=false # 如果为true,则导致进程的stderr输出在其stdout文件描述符上被发送回 supervisord
stdout_logfile=/a/path # 将进程stdout输出放在此文件中(如果redirect_stderr为true,还将stderr输出放在此文件中)
stdout_logfile_maxbytes=1MB # stdout_logfile 在旋转之前可能消耗的最大字节数(可以在值中使用类似“KB”,“MB”和“GB”的后缀乘法器)。将此值设置为0表示无限日志大小
stdout_logfile_backups=10 # 由进程标准输出日志文件轮换产生的 stdout_logfile 备份的数量。如果设置为0,将不保留备份。
stdout_capture_maxbytes=1MB # 当进程处于“stdout捕获模式”(见 捕获模式)时,写入捕获FIFO的最大字节数,为0,则过程捕获模式将关闭。
stdout_events_enabled=false # 如果为true,则当进程写入其stdout文件描述符时,将发出PROCESS_LOG_STDOUT事件
stderr_logfile=/a/path # 将过程stderr输出放在此文件中,除非 redirect_stderr 为true
stderr_logfile_maxbytes=1MB # stderr_logfile 的日志文件轮换前的最大字节数
stderr_logfile_backups=10 # 由进程stderr日志文件轮换导致的备份数
stderr_capture_maxbytes=1MB # 当进程处于“stderr捕获模式”(见 捕获模式)时,写入捕获FIFO的最大字节数
stderr_events_enabled=false # 如果为true,则当进程写入其stderr文件描述符时,将发出PROCESS_LOG_STDERR事件
environment=A="1",B="2" # 将被放置在子进程的环境中的 KEY="val",KEY2="val2" 形式的键/值对的列表。
serverurl=AUTO # 在环境中传递到子进程进程的URL作为 SUPERVISOR_SERVER_URL
process_name
[program:cat]
process_name=%(program_name)s # 任务名为:cat 关闭的命令为:supervisorctl stop cat
process_name=%(program_name)s-1 # 任务名为:cat:cat-1 关闭的命令为:supervisorctl stop cat:cat-1
numprocs
process_name=%(program_name)s
numprocs=1
#若numprocs > 1时,若 process_name=%(program_name)s 时报错。
Error: %(process_num) must be present within process_name when numprocs > 1
process_name=%(program_name)s_%(process_num)02d ;当同一个脚本,希望启动多个守护进程时,多进程名称肯定不能相同,匹配多个
numprocs=4
startsecs
;程序必须保持运行的秒数(def 1)
startsecs=1
#有些任务处理的较快,默认为程序必须保持1秒时,则会启动不起来。此时,可以将startsecs=0
redirect_stderr
#把stderr重定向到stdout(def false)
redirect_stderr=true
如果选false,则会使用stderr_logfile的日志文件记录
四、常用的事件类型
Event 解释
PROCESS_STATE 进程状态发生改变
PROCESS_STATE_STARTING 进程状态从其他状态转换为正在启动(Supervisord的配置项中有startsecs配置项,是指程序启动时需要程序至少稳定运行x秒才认为程序运行正常,在这x秒中程序状态为正在启动)
PROCESS_STATE_RUNNING 进程从正在启动状态转换为正在运行状态
PROCESS_STATE_BACKOFF 进程从正在启动状态转换为启动失败状态,Supervisor 正在重启该进程
PROCESS_STATE_STOPPING 进程从正在运行状态或正在启动状态转换为正在停止状态
PROCESS_STATE_EXITED 进程从正在运行状态转换为退出状态,expected 退出码,如果是 0 表示进程异常退出,1 表示进程正常退出。
PROCESS_STATE_STOPPED 进程从正在停止状态转换为已停止状态
PROCESS_STATE_FATAL 进程从启动失败状态(BACKOFF)转换为失败状态(FATAL). 意味着 startretries 尝试次数已达上限,Supervisor 已放弃重启该进程。
PROCESS_LOG 进程产生日志输出,被管理的进程需配置,stdout_events_enabled=true or stderr_events_enabled=true 这个事件通知才会生效。
PROCESS_LOG_STDOUT 进程产生标准输出,被管理的进程需配置,stdout_events_enabled=true
PROCESS_LOG_STDERR 进程产生错误输出,被管理的进程需配置,stderr_events_enabled=true
相关文章:
superviso配合laravel的使用:https://learnku.com/docs/laravel/5.8/queues/3923#supervisor-configuration
supervisor 安装使用详解:http://www.w3capi.com/cms/content/id/57/cid/26.html
Supervisor使用详解:https://www.jianshu.com/p/0b9054b33db3
Supervisor Event Listener 任务监控与告警:https://blog.youkuaiyun.com/weixin_45032957/article/details/100184735
supervisor详解-苏坡外泽:https://blog.youkuaiyun.com/weixin_37008947/article/details/108107216
Supervisor 管理进程服务重启报警:https://blog.youkuaiyun.com/fgf00/article/details/104579788
supervisor官方文档:http://supervisord.org/