linux-doc-supervisor

环境

1
2
3
4
5
6
7
8
# 安装
yum install -y supervisor

# 开机自启动
systemctl enable supervisord

# 启动supervisord服务
systemctl start supervisord

命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 刷新配置-会启动新的进程
supervisorctl update

# 刷新配置-不会重启新的进程
supervisorctl reload

# 查看所有服务列表
supervisorctl

# 启动全部服务
supervisorctl start all

# 停止全部服务
supervisorctl stop all

# 重启全部服务
supervisorctl restart all

配置

在编辑配置文件时一定要注意 ; 前后需要空格

1
2
3
4
5
# 主配置在 
/etc/supervisor.conf

# 子配置在
/etc/supervisord.d
配置模板
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
;[program:HelloSupervisor] 是被管理的进程配置参数,HelloSupervisor 是进程的名称
[program:HelloSupervisor]
environment=JAVA_HOME=/opt/jdk1.8.0_241/bin ; 这里可以创建环境变量
directory=/opt/HelloSupervisor ; 程序的启动目录
command=/opt/jdk1.8.0_241/bin/java -Xms512m -Xmx1024m -Dspring.profiles.active=prd -Dserver.port=8080 -jar /opt/HelloSupervisor/HelloSupervisor.jar ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart=true ; 在 supervisord 启动的时候也自动启动
startsecs=10 ; 启动 10 秒后没有异常退出,就表示进程正常启动了,默认为 1 秒
autorestart=true ; 程序退出后自动重启 , 可选值:[unexpected,true,false],默认为 unexpected,表示进程意外杀死后才> 重启
startretries=3 ; 启动失败自动重试次数,默认是 3
user=root ; 用哪个用户启动进程,默认是 root
priority=999 ; 进程启动优先级,默认 999,值小的优先启动
redirect_stderr=true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes=20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数,默认是 10
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile=/opt/HelloSupervisor/logs/log.log
stopasgroup=false ;默认为 false, 进程被杀死时,是否向这个进程组发送 stop 信号,包括子进程
killasgroup=false ;默认为 false,向进程组发送 kill 信号,包括子进程
stopsignal=TERM ; 杀死进程的信号量:kill -9:KILL; kill -2:INT; kill -15:TERM 默认配置

stopscript=stop_script.sh ; 当进行停止的脚本
stopwaitsecs=10 ; 定义 Supervisor 等待进程停止的时间
command_stop=echo "Stopping process..." ; 定义在停止进程之前执行的命令
command_start=echo "Starting process..." ; 定义在启动进程之前执行的命令
command_restart=echo "Restarting process..." ; 定义在重启进程之前执行的命令
command_reload=echo "Reloading process..." ; 定义在重新加载进程之前执行的命令
numprocs=1 ; 定义要启动的进程实例数量
numprocs_start=1 ; 定义启动的进程实例的起始编号
1
2
3
4
5
6
[program:logic]
command=/data/game/jihuang2d/famine2d_server_release/dev/startlogic.sh ; 启动命令
autostart=false ; 在 supervisord 启动时自动启动
autorestart=true ; 程序退出后自动重启
stderr_logfile=/var/log/logic.err.log ; 错误日志路径
stdout_logfile=/var/log/logic.out.log ; 输出日志路径