Supervisor 是 Linux 下轻量级进程管理工具,用于托管后台服务,支持自动重启、日志记录及 Web 界面管理;通过配置文件定义程序,用 supervisorctl 控制启停与查看状态。

Supervisor 是 Linux 下轻量级、易配置的进程管理工具,特别适合长期运行的后台服务(如 Python Web 应用、爬虫、消息队列消费者等)。它不依赖系统 init 系统,能自动拉起崩溃进程、记录日志、提供命令行和 Web 控制界面。
安装与基础配置
大多数发行版可通过包管理器安装:
- Ubuntu/Debian:sudo apt install supervisor
- CentOS/RHEL:sudo yum install epel-release && sudo yum install supervisor(或使用 dnf)
- Python 环境(推荐 pip):pip install supervisor(需注意权限和路径)
安装后主配置文件通常位于 /etc/supervisor/supervisord.conf。默认已启用 [include] 段,会加载 /etc/supervisor/conf.d/*.conf 中的程序配置。无需修改主配置,直接在 conf.d/ 下新建配置即可。
编写单个程序的 Supervisor 配置
以管理一个 Flask 应用为例(假设启动脚本为 /opt/myapp/start.sh):
创建 /etc/supervisor/conf.d/myapp.conf:
[program:myapp] command=/opt/myapp/start.sh directory=/opt/myapp user=www-data autostart=true autorestart=true startretries=3 redirect_stderr=true stdout_logfile=/var/log/myapp/app.log stderr_logfile=/var/log/myapp/error.log environment=PATH="/usr/local/bin:/usr/bin:/bin",PYTHONPATH="/opt/myapp"
关键字段说明:
- command:必须是前台运行的命令(不能加 &);若原程序是后台 daemon,需改用 --no-daemon 或类似参数
- user:指定运行用户,避免 root 权限滥用
- autorestart:设为 true 后,进程退出即重启;设为 unexpected 可跳过预期退出(如正常 shutdown)
- environment:可注入环境变量,解决 PATH 或 Python 模块路径问题
加载配置并控制进程
配置写好后,需重载 Supervisor 让其识别新任务:
- 重新读取所有配置:sudo supervisorctl reread
- 把新程序加入管控:sudo supervisorctl add myapp(或直接 update)
- 启动程序:sudo supervisorctl start myapp
- 查看状态:sudo supervisorctl status(输出含 RUNNING、STOPPED、STARTING 等)
- 实时查看日志:sudo supervisorctl tail -f myapp stdout
常用命令可简写,如 supervisorctl start all 启动全部,stop myapp 停止指定服务。所有操作无需重启 supervisord 进程本身。
进阶:Web 管理界面与故障排查
启用 Web 界面只需在 supervisord.conf 的 [inet_http_server] 段取消注释并设置:
[inet_http_server] port=*:9001 username=user password=123456
重启 supervisord 后,浏览器访问 http://服务器IP:9001 即可图形化管理所有进程。
常见问题排查方向:
- 程序显示 FATAL:检查 command 路径是否存在、权限是否足够、启动脚本是否报错(先手动执行测试)
- 日志为空:确认 stdout_logfile 目录存在且 user 有写入权限
- 环境变量不生效:确保 environment 中的变量名无空格,值用双引号包裹,PATH 等系统变量要显式继承
- supervisorctl 连接失败:检查 [unix_http_server] 的 socket 路径与权限,或确认 supervisord 是否正在运行(sudo systemctl status supervisor)










