Supervisor 配置文件详解
Supervisor 的主配置文件通常位于:
/etc/supervisor/supervisord.conf
但在大多数情况下,我们不直接修改 supervisord.conf
,而是在 /etc/supervisor/conf.d/
目录下创建单独的应用程序配置文件,例如:
/etc/supervisor/conf.d/myapp.conf
Supervisor 主配置文件结构(/etc/supervisor/supervisord.conf
)
主配置文件是一个 INI 格式的文件,包含多个部分,每个部分都用 [section]
标识。
1. [supervisord]
- Supervisor 主进程配置
[supervisord]
logfile=/var/log/supervisord.log ; 主管理进程的日志
logfile_maxbytes=50MB ; 日志文件的最大大小
logfile_backups=10 ; 日志备份的数量
loglevel=info ; 日志级别(可选:debug, info, warn, error, critical)
pidfile=/var/run/supervisord.pid ; 存储 Supervisor 进程的 PID
nodaemon=false ; 是否以守护进程运行(false = 以守护进程运行,true = 前台运行)
minfds=1024 ; 可以打开的文件描述符数量
minprocs=200 ; 允许创建的最大子进程数
2. [unix_http_server]
- Unix Socket 配置
[unix_http_server]
file=/var/run/supervisor.sock ; Unix socket 文件
chmod=0700 ; 设置 socket 文件的权限
chown=nobody:nogroup ; 设置 socket 的用户和组
3. [inet_http_server]
- HTTP 访问配置(可选)
[inet_http_server]
port=127.0.0.1:9001 ; Web 访问接口地址和端口
username=admin ; 登录用户名
password=secret ; 登录密码
访问方式:
http://127.0.0.1:9001
你可以通过 Web 界面管理 Supervisor。
4. [supervisorctl]
- Supervisor 控制台配置
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; 使用 Unix Socket 进行通信
5. [rpcinterface:supervisor]
- RPC 接口配置
[rpcinterface:supervisor]
supervisor.rpcinterface_factory=supervisor.rpcinterface:make_main_rpcinterface
应用程序配置文件结构(/etc/supervisor/conf.d/myapp.conf)
每个独立的服务(如 Flask、Django、Celery、Gunicorn)通常有一个单独的配置文件。
1. 基本配置:Gunicorn 运行 Flask 示例
[program:myflaskapp]
command=/usr/local/bin/gunicorn -w 4 -b 0.0.0.0:8000 app:app
directory=/var/www/myflaskapp
autostart=true
autorestart=true
stderr_logfile=/var/log/myflaskapp.err.log
stdout_logfile=/var/log/myflaskapp.out.log
解释:
program:myflaskapp
:定义服务名称(唯一标识)。command
:启动 Flask/Gunicorn 的命令。directory
:指定工作目录。autostart=true
:Supervisor 启动时自动启动此服务。autorestart=true
:服务异常退出时自动重启。stderr_logfile
:标准错误日志存放路径。stdout_logfile
:标准输出日志存放路径。
2. 详细字段说明
[program:x] - 定义服务
[program:myapp]
command=/usr/bin/python3 /var/www/myapp/app.py ; 运行的命令
directory=/var/www/myapp ; 工作目录
user=nobody ; 运行服务的用户
autostart=true ; 是否随 supervisor 启动自动运行
autorestart=true ; 进程异常退出后自动重启
startsecs=5 ; 启动 5 秒后认为服务启动成功
startretries=3 ; 启动失败后的重试次数
stopsignal=TERM ; 关闭信号(默认为 TERM)
stopwaitsecs=10 ; 关闭服务的等待时间
redirect_stderr=true ; 是否将 stderr 重定向到 stdout
stdout_logfile=/var/log/myapp.out.log ; 标准输出日志路径
stderr_logfile=/var/log/myapp.err.log ; 错误输出日志路径
3. 配置 Gunicorn 进程
[program:gunicorn]
command=/usr/local/bin/gunicorn -w 4 -b 0.0.0.0:8000 app:app
directory=/var/www/myflaskapp
user=www-data
autostart=true
autorestart=true
stdout_logfile=/var/log/gunicorn.out.log
stderr_logfile=/var/log/gunicorn.err.log
4. 配置 Celery Worker
[program:celery]
command=/usr/local/bin/celery -A app.celery worker --loglevel=info
directory=/var/www/myflaskapp
user=www-data
autostart=true
autorestart=true
stdout_logfile=/var/log/celery.out.log
stderr_logfile=/var/log/celery.err.log
5. 配置多个 Gunicorn 实例
[program:gunicorn1]
command=/usr/local/bin/gunicorn -w 2 -b 0.0.0.0:8001 app1:app
directory=/var/www/myapp1
autostart=true
autorestart=true
stdout_logfile=/var/log/gunicorn1.out.log
stderr_logfile=/var/log/gunicorn1.err.log
[program:gunicorn2]
command=/usr/local/bin/gunicorn -w 2 -b 0.0.0.0:8002 app2:app
directory=/var/www/myapp2
autostart=true
autorestart=true
stdout_logfile=/var/log/gunicorn2.out.log
stderr_logfile=/var/log/gunicorn2.err.log
进程组配置
Supervisor 允许将多个进程组合在一起进行管理。
6. 配置进程组
[group:mygroup]
programs=gunicorn,celery
priority=999
programs
:包含的服务名称priority
:启动顺序,数值越低优先级越高
事件监听器配置
[eventlistener:mylistener]
command=/usr/local/bin/mylistener.py
events=PROCESS_STATE, TICK_60
events
:指定要监听的事件(如PROCESS_STATE
)
配置示例
Flask + Gunicorn + Celery 配置
[program:gunicorn]
command=/usr/local/bin/gunicorn -w 4 -b 0.0.0.0:8000 app:app
directory=/var/www/myflaskapp
autostart=true
autorestart=true
stderr_logfile=/var/log/gunicorn.err.log
stdout_logfile=/var/log/gunicorn.out.log
[program:celery]
command=/usr/local/bin/celery -A app.celery worker --loglevel=info
directory=/var/www/myflaskapp
autostart=true
autorestart=true
stderr_logfile=/var/log/celery.err.log
stdout_logfile=/var/log/celery.out.log
Supervisor 常用命令
1. 重新加载配置
sudo supervisorctl reread
sudo supervisorctl update
2. 启动/停止/重启服务
sudo supervisorctl start myflaskapp
sudo supervisorctl stop myflaskapp
sudo supervisorctl restart myflaskapp
3. 查看服务状态
sudo supervisorctl status
4. 停止所有服务
sudo supervisorctl stop all
总结
- Supervisor 配置结构:
supervisord.conf
负责主进程配置。/etc/supervisor/conf.d/
目录下的独立配置文件管理具体服务。
- 关键配置字段:
command
:启动命令directory
:工作目录autostart
和autorestart
:自动启动和自动重启- 日志配置:
stdout_logfile
和stderr_logfile
- 常用命令:
reread
、update
、status
、restart
、stop
等。