Supervisor 进程管理工具详解 @

1. 安装方法 @

根据不同的操作系统环境,Supervisor 提供多种安装方式:

# Arch Linux/Manjaro 系统
yay -S supervisor

# 使用 Python pip 安装(跨平台)
pip install supervisor

# Ubuntu/Debian 系统
sudo apt-get install supervisor

# CentOS/RHEL 系统
sudo yum install supervisor

2. 配置文件结构 @

Supervisor 采用分层配置结构,确保管理的灵活性和清晰性:

2.1 主配置文件 @

  • 路径: /etc/supervisord.conf
  • 作用: 定义全局设置和 Supervisor 守护进程行为

2.2 子进程配置目录 @

  • 路径: /etc/supervisord.d/
  • 作用: 存放各个被管理进程的独立配置文件,便于模块化管理
  • 文件格式: 通常使用 .ini​ 或 .conf 扩展名

3. 主配置文件详解 @

; === UNIX Socket 服务器配置 ===
[unix_http_server]
file=/tmp/supervisor.sock   ; UNIX socket 文件路径,用于 supervisorctl 通信
;chmod=0700                 ; Socket 文件权限设置(默认 0700)
;chown=nobody:nogroup       ; Socket 文件属主设置

; === HTTP 服务器配置(可选Web界面)===
;[inet_http_server]         ; 启用 HTTP 服务器提供 Web 管理界面
;port=127.0.0.1:9001        ; 绑定 IP 和端口(注意公网访问的安全性)
;username=user              ; Web 界面登录用户名
;password=123               ; Web 界面登录密码

; === Supervisor 主进程配置 ===
[supervisord]
logfile=/tmp/supervisord.log ; 主进程日志文件路径
logfile_maxbytes=50MB        ; 单个日志文件最大大小
logfile_backups=10           ; 日志备份文件保留数量
loglevel=info                ; 日志级别(debug, info, warn, trace)
pidfile=/tmp/supervisord.pid ; PID 文件路径
nodaemon=false               ; 是否前台运行(默认后台守护进程)
minfds=1024                  ; 最小文件描述符限制
minprocs=200                 ; 最小进程数限制

; === Supervisor 控制工具配置 ===
[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; 通过 UNIX socket 连接
;serverurl=http://127.0.0.1:9001     ; 通过 HTTP 连接

; === 被管理进程配置模板 ===
;[program:program_name]              ; 程序定义,program_name 为唯一标识
;command=/path/to/command            ; 启动命令(必填)
;autostart=true                      ; 是否随 Supervisor 启动而自动启动
;autorestart=true                    ; 退出后自动重启策略
;startsecs=10                        ; 启动后观察时间(秒)
;startretries=3                      ; 启动失败重试次数
;user=username                       ; 运行用户身份
;priority=999                        ; 启动优先级(数值小的优先)
;redirect_stderr=true                ; 错误输出重定向到标准输出

; === 包含其他配置文件 ===
[include]
files = relative/directory/*.ini     ; 包含其他配置文件(支持通配符)

4. 子进程配置示例 @

以下是一个具体的 Web 应用进程管理配置示例:

# === 博客应用进程配置 ===
[program:blog]
# 工作目录设置
directory=/opt/blog

# 启动命令(完整路径)
command=/usr/bin/python /opt/blog/app.py

# 自动启动设置
autostart=true
autorestart=unexpected  ; 仅在意外退出时重启

# 启动监控参数
startsecs=5             ; 启动后观察 5 秒确认正常运行
startretries=3          ; 启动失败最多重试 3 次

# 运行身份
user=www-data           ; 使用指定用户运行

# 日志配置
stdout_logfile=/var/log/blog/stdout.log
stdout_logfile_maxbytes=20MB    ; 单个日志文件最大 20MB
stdout_logfile_backups=20       ; 保留 20 个备份文件
stderr_logfile=/var/log/blog/stderr.log
redirect_stderr=true            ; 错误输出重定向到标准输出

# 环境变量设置
environment=PYTHONPATH="/opt/blog",PORT="8080"

# 进程停止信号设置
stopsignal=TERM         ; 停止时发送 TERM 信号
stopwaitsecs=30         ; 等待进程停止的超时时间

5. 常用管理命令 @

5.1 服务管理命令 @

# 启动 Supervisor 服务
supervisord -c /etc/supervisord.conf

# 重新加载配置并重启所有程序
supervisorctl reload

# 重新读取配置(不重启运行中的程序)
supervisorctl reread

5.2 进程管理命令 @

# 查看所有进程状态
supervisorctl status

# 启动单个进程
supervisorctl start blog

# 停止单个进程
supervisorctl stop blog

# 重启单个进程
supervisorctl restart blog

# 重启所有进程
supervisorctl restart all

# 更新配置(新增/修改配置后使用)
supervisorctl update

5.3 监控和调试命令 @

# 查看进程详细日志
tail -f /var/log/blog/stdout.log

# 进入 Supervisor 控制台
supervisorctl

# 在控制台内执行多个命令
supervisorctl> status
supervisorctl> stop blog
supervisorctl> start blog

6. 最佳实践建议 @

6.1 配置管理 @

  • 为每个应用创建独立的配置文件
  • 使用有意义的程序名称(如 program:web_app
  • 合理设置日志轮转策略,避免磁盘空间耗尽

6.2 安全考虑 @

  • 生产环境避免使用 Web 界面,或严格限制访问权限
  • 使用非 root 用户运行应用程序
  • 定期检查日志文件权限

6.3 性能优化 @

  • 根据应用特性调整 startsecs​ 和 startretries
  • 合理设置资源限制,避免单个进程影响系统稳定性
  • 使用 priority 控制关键服务的启动顺序

通过这种结构化的配置和管理方式,Supervisor 能够有效地监控和维护系统进程,确保服务的稳定运行和快速故障恢复。