Supervisor 主配置文件:supervisord.conf 详解

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

总结

  1. Supervisor 配置结构:
    • supervisord.conf 负责主进程配置。
    • /etc/supervisor/conf.d/ 目录下的独立配置文件管理具体服务。
  2. 关键配置字段:
    • command:启动命令
    • directory:工作目录
    • autostartautorestart:自动启动和自动重启
    • 日志配置:stdout_logfilestderr_logfile
  3. 常用命令:
    • rereadupdatestatusrestartstop 等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

彬彬侠

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值