跳到主要内容

supervisord 管理守护进程

运行 Supervisor 时会启动一个进程 supervisord,它负责启动所管理的进程,并将所管理的进程作为自己的子进程来启动,而且可以在所管理的进程出现崩溃时自动重启。

supervisorctl 是命令行管理工具,可以用来执行 stop、start、restart 等命令,来对这些子进程进行管理。supervisor 是所有进程的父进程,管理着启动的子进展,supervisor 以子进程的 PID 来管理子进程,当子进程异常退出时 supervisor 可以收到相应的信号量。

sed -i 's/dl-cdn.alpinelinux.org/mirrors.ustc.edu.cn/g' /etc/apk/repositories && apk upgrade --update
apk add supervisor

配置文件

[program:test_one]
command=java -jar /data/smallvideo/supervisor/taskApp-exec.jar TaskTestOne ; 被监控的进程路径
priority=1 ; 数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout

[program:test_two]
command=java -jar /data/smallvideo/supervisor/taskApp-exec.jar TaskTestTwo ; 被监控的进程路径
priority=1 ; 数字越高,优先级越高
numprocs=1 ; 启动几个进程
autostart=true ; 随着supervisord的启动而启动
autorestart=true ; 自动重启
startretries=10 ; 启动失败时的最多重试次数
exitcodes=0 ; 正常退出代码
stopsignal=KILL ; 用来杀死进程的信号
stopwaitsecs=10 ; 发送SIGKILL前的等待时间
redirect_stderr=true ; 重定向stderr到stdout

实际使用例:

e.g.

[supervisord]
nodaemon=true
logfile=/var/log/supervisord.log

[unix_http_server]
file=/run/supervisord.sock

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///run/supervisord.sock

[program:sshd]
command=/usr/sbin/sshd -D

[program:nginx]
command=/usr/sbin/nginx -g 'daemon off;'

[program:php-fpm]
command=/usr/local/sbin/php-fpm

[program:collect]
command=/var/buildsh/collect -f collect-api.yaml
directory=/var/buildsh

References