Supervisor 是用于管理后台服务的进程工具,确保服务不崩溃、不掉线、自动恢复;支持 Python、Node.js、Go 等各类长期运行服务,需安装、启用、配置并用 supervisorctl 管控。

服务器进程管理工具,比如 Supervisor,核心作用就是让后台服务“自己管自己”——不崩溃、不掉线、出问题能自动恢复。它不是靠写 shell 脚本或加 & 后台跑,而是真正把进程纳入统一监控体系,适合 Python、Node.js、Go、Java 或 Shell 脚本等各类长期运行的服务。
安装和启动 Supervisord 服务
大多数 Linux 系统可直接用包管理器安装:
- Ubuntu/Debian:
sudo apt install supervisor -y - CentOS/RHEL(含 Rocky/AlmaLinux):
sudo yum install epel-release && sudo yum install supervisor或sudo dnf install supervisor - 也可用 pip:
pip install supervisor(注意 Python 版本兼容性,推荐 Python 3.6+)
安装后,Supervisor 通常不会自动启用开机自启,需手动设置:
sudo systemctl enable supervisordsudo systemctl start supervisord
验证是否运行:sudo systemctl status supervisord 或 ps aux | grep supervisord。如果看到主进程在运行,说明服务已就绪。
为单个服务编写配置文件
不建议直接改主配置 /etc/supervisor/supervisord.conf,而是把每个服务单独写进 /etc/supervisor/conf.d/ 目录下,以 .conf 结尾。例如管理一个 Flask 应用:
宝塔面板11.3.0是一款针对Linux服务器设计的可视化管理工具,通过重构核心模块实现资源占用显著降低,尤其适合低配置服务器环境。它将复杂的命令行操作转化为直观的图形界面,帮助开发者快速完成网站部署、环境配置及日常运维工作,无需专业技术背景即可高效管理服务器。
[program:myweb] command=python /opt/myapp/app.py directory=/opt/myapp user=www-data autostart=true autorestart=true startsecs=5 redirect_stderr=true stdout_logfile=/var/log/myapp/out.log stderr_logfile=/var/log/myapp/err.log
关键点说明:
-
command必须是前台运行命令(不能带&,也不能是 daemon 模式;如 Nginx 需加-g "daemon off;") -
user推荐设为非 root 用户,提升安全性 -
autorestart=true表示进程退出即重启;设为unexpected可跳过正常退出(如程序主动调用 exit(0)) -
startsecs是判断启动成功的等待秒数,避免刚启动就崩溃被误判为失败
加载配置并控制进程
写完配置后,需要让 Supervisor 识别新任务:
- 重新读取所有配置:
sudo supervisorctl reread - 将新程序加入管控(若未自动加载):
sudo supervisorctl add myweb - 或一步到位更新全部:
sudo supervisorctl update - 启动服务:
sudo supervisorctl start myweb - 查看状态:
sudo supervisorctl status(输出类似myweb RUNNING pid 1234, uptime 0:02:15)
其他常用操作:
- 停止:
sudo supervisorctl stop myweb - 重启:
sudo supervisorctl restart myweb - 查看实时日志:
sudo supervisorctl tail -f myweb stdout或tail -f /var/log/myapp/out.log
调试与常见问题处理
刚配置时容易卡在“STARTING”或“FATAL”状态,可按以下顺序排查:
- 先前台启动 Supervisord 查看报错:
supervisord -n -c /etc/supervisor/supervisord.conf(-n表示不后台,直接打印日志) - 检查配置语法是否正确:
supervisord -c /etc/supervisor/supervisord.conf -y(测试模式,不实际启动) - 确认
command路径是否存在、权限是否足够、依赖环境(如 Python 包、PATH)是否已注入(可用environment字段补充) - 留意日志路径的父目录是否存在且可写(如
/var/log/myapp/需提前mkdir -p并chown www-data)
Supervisor 还支持 Web 界面(默认关闭),如需启用,编辑主配置中的 [inet_http_server] 段,设置端口、用户名和密码即可访问。

















