Supervisor是Linux/Unix下用Python开发的轻量级进程管理工具,专注子进程生命周期管理,支持崩溃自动重启、日志聚合与集中监控,不支持Windows,需配置为前台进程运行。

Supervisor 是 Linux 下轻量但可靠的进程守护工具,适合中小项目长期运行 Python、Node.js、Go 或 Shell 类服务。它不替代 systemd,而是专注“子进程生命周期管理”——崩溃自动拉起、日志统一收集、状态集中查看。用对了,一个配置文件就能让服务真正“永不掉线”。
一、安装与服务启用
CentOS/RHEL 系统推荐用 yum + EPEL:
- 先装扩展源:sudo yum install -y epel-release
- 再装 Supervisor:sudo yum install -y supervisor
- 启用开机自启:sudo systemctl enable --now supervisord
Ubuntu/Debian 则直接:sudo apt update && sudo apt install -y supervisor,安装后服务默认已启用。
验证是否运行:sudo systemctl status supervisord,看到 active (running) 即可。
二、写一个可用的进程配置
配置文件放在 /etc/supervisord.d/ 目录下,后缀为 .ini(如 myapp.ini):
- [program:myapp] —— 进程名,后续用 supervisorctl start myapp 控制
- command=/usr/bin/python3 /opt/myapp/app.py —— 必须是绝对路径,不能用 ~ 或相对路径
- autostart=true —— supervisord 启动时自动拉起该进程
- autorestart=true —— 崩溃或退出码非 0 时自动重启
- user=www-data —— 指定运行用户,避免 root 权限风险
- stdout_logfile=/var/log/myapp/out.log —— 标准输出日志,建议配 stdout_logfile_maxbytes=10MB 自动轮转
- redirect_stderr=true —— 把 stderr 合并进 stdout 日志,更易排查
注意:目录权限要匹配 user 设置,比如 user=www-data,那 /opt/myapp 就得给 www-data 读取权限。
三、加载配置并操作进程
新增或修改配置后,分两步生效:
- 通知 supervisord 扫描新配置:sudo supervisorctl reread
- 应用变更(启动新进程/重载已有进程):sudo supervisorctl update
常用控制命令:
- sudo supervisorctl status —— 查所有进程当前状态(RUNNING / STARTING / FATAL)
- sudo supervisorctl start myapp —— 启动单个
- sudo supervisorctl restart myapp —— 重启(等价于 stop + start)
- sudo supervisorctl tail myapp —— 实时看日志(类似 tail -f)
四、避坑要点
实际部署中最常卡在这几处:
- 环境变量缺失:Supervisor 不继承 shell 的 PATH 或 PYTHONPATH,需在配置里显式声明:environment=PATH="/usr/local/bin:/usr/bin",PYTHONPATH="/opt/myapp"
- 启动脚本阻塞失败:确保 command 启动的是前台进程(如 gunicorn 要加 --daemon=False),不能后台化(&)或自行 fork
- 权限拒绝(FATAL):检查日志路径父目录是否可写、command 路径是否存在、user 是否有执行权限
- 无限重启循环:如果进程秒退,Supervisor 默认 10 秒内重启 3 次就标记为 BACKOFF。加 startretries=3 和 startsecs=5 控制启动稳定判定窗口
查问题最直接的方式是前台启动 supervisord:sudo supervisord -n -c /etc/supervisord.conf,终端会打印完整错误链路。


















