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 能够有效地监控和维护系统进程,确保服务的稳定运行和快速故障恢复。