解析:Supervisor 进程管理工具详解
一、Supervisor 核心功能
- 进程守护
- 将普通命令行进程转为后台守护进程
- 监控进程状态,异常退出时自动重启
- 支持批量启动/关闭进程(如服务器宕机后一键恢复所有服务)
- 核心特性
- 基于 Python 开发,支持跨平台
- 通过子进程管理实现高可靠性
- 支持非 root 用户管理进程
- 提供 Web 管理界面(可选)
二、安装与验证
1. 安装方式
- CentOS
yum install -y epel-release
yum -y install supervisor
- Ubuntu/Debian
apt-get install supervisor
- pip 安装
2. 安装验证
- 生成关键命令:
echo_supervisord_conf # 生成配置文件模板
supervisorctl # 客户端控制工具
supervisord # 服务端主程序
- 关键目录:
/etc/supervisord.conf # 主配置文件
/etc/supervisord.d/ # 子配置文件目录
3. 启动服务
/usr/bin/supervisord -c /etc/supervisord.conf
三、配置文件解析
1. 主配置文件 (/etc/supervisord.conf
)
- 核心配置段
[unix_http_server]
file=/var/run/supervisor/supervisor.sock ; UNIX socket 路径
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; 日志路径
pidfile=/var/run/supervisord.pid ; PID 文件
[include]
files = supervisord.d/*.ini ; 加载子配置
- Web 管理(可选)
[inet_http_server]
port=0.0.0.0:9001 ; 开放 IP 和端口
username=user ; 登录用户名
password=123 ; 登录密码
2. 子配置文件(进程配置)
- 典型配置示例
[program:nginx]
command=/usr/sbin/nginx -g 'daemon off;' ; 必须前台运行
autostart=true ; 随 Supervisor 启动
autorestart=unexpected ; 异常退出时重启
stdout_logfile=/var/log/supervisor/nginx.log
user=root ; 运行用户
- 关键参数说明
参数 |
说明 |
numprocs |
启动进程副本数(需配合 %(process_num)s ) |
stopasgroup |
停止时是否终止子进程(用于 Flask 等场景) |
environment |
设置环境变量(如 PYTHONPATH="/opt/app" ) |
四、进程管理命令
命令 |
功能 |
supervisorctl status |
查看所有进程状态 |
supervisorctl start/stop [进程名|all] |
启停单个/所有进程 |
supervisorctl restart [进程名|all] |
重启进程 |
supervisorctl reread |
重载配置(不重启) |
supervisorctl update |
应用新配置并启动新增进程 |
五、高级功能
1. Systemd 集成
- 创建服务文件
vim /usr/lib/systemd/system/supervisor.service
- 服务配置
[Unit]
Description=Supervisor
After=network.target
[Service]
ExecStart=/usr/bin/supervisord -c /etc/supervisord.conf
ExecStop=/usr/bin/supervisorctl shutdown
2. 组管理
- 配置示例
[group:webapps]
programs=nginx, gunicorn, celery
[program:gunicorn]
command=/opt/venv/bin/gunicorn app.wsgi
- 操作命令
supervisorctl start webapps:* # 启动组内所有进程
supervisorctl stop webapps:nginx # 停止组内单个进程
六、常见问题解决
问题场景 |
解决方案 |
进程频繁重启 (BACKOFF) |
检查程序是否前台运行,确保日志无报错 |
权限问题导致 sock 文件缺失 |
执行 unlink /var/run/supervisor/supervisor.sock 后重启服务 |
多实例冲突 |
通过 ps -ef | grep supervisord 查找残留进程并终止 |
配置加载失败 |
使用 supervisorctl reread && supervisorctl update 强制更新 |
七、最佳实践
- 日志管理
- 为每个进程单独配置日志文件
- 设置合理的日志轮转策略(如
stdout_logfile_backups=10
)
- 安全建议
- Web 管理界面需设置强密码
- 使用非 root 用户运行敏感进程
- 性能优化
- 根据 CPU 核心数设置
agcount
(XFS 文件系统场景)
- 对于高并发服务,使用组管理批量操作
总结
- 核心价值:简化进程守护、实现自动化运维
- 适用场景:Web 服务、后台任务队列、数据库连接池等需高可用的服务
- 优势对比:相比
systemd
更适合多进程管理,比 nohup
提供更完善的监控能力
通过合理配置和问题排查,Supervisor 可显著提升服务稳定性,是 Linux 系统管理中的核心工具之一。