最新下载
热门教程
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
服务器管理如何使用 Supervisor 管理后台脚本
时间:2026-08-25 08:16:48 编辑:袖梨 来源:一聚教程网
Supervisor 是用 Python 编写的轻量级进程管理工具,适用于 Flask API、爬虫等长期运行的后台脚本,支持自动重启、日志记录和开机自启;配置需在 /etc/supervisor/conf.d/ 下新建 .conf 文件,指定 command、directory、user 等参数,修改后执行 supervisorctl reread && update 生效。
Supervisor 是一个用 Python 编写的进程管理工具,适合长期运行的后台脚本(比如 Flask API、爬虫、消息监听器等)。它能自动拉起崩溃的进程、记录日志、支持开机自启,比手动 nohup 或 systemd 更轻量、更易配置。
安装与基础服务启动
在 Ubuntu/Debian 上执行:
sudo apt updatesudo apt install supervisorsudo systemctl enable supervisorsudo systemctl start supervisor
安装后配置文件默认位于 /etc/supervisor/conf.d/,每个项目单独建一个 .conf 文件,例如 mybot.conf。
编写一个脚本的 Supervisor 配置
以运行一个 Python 脚本 /opt/myapp/bot.py 为例,创建配置:
sudo nano /etc/supervisor/conf.d/mybot.conf
填入以下内容:
[program:mybot]command=python3 /opt/myapp/bot.pydirectory=/opt/myappuser=www-dataautostart=trueautorestart=truestartretries=3redirect_stderr=truestdout_logfile=/var/log/supervisor/mybot.logstopasgroup=truekillasgroup=true
- command:实际要运行的命令,建议写绝对路径
- directory:切换到该目录再执行,避免路径相关错误
- user:指定运行用户,不要用 root,推荐 www-data 或专用低权限用户
- autorestart:进程退出后自动重启(包括异常退出和正常退出)
-
stdout_logfile:必须指定日志路径,Supervisor 不会自动创建目录,需提前
sudo mkdir -p /var/log/supervisor - stopasgroup/killasgroup:确保子进程(如 bot 启动的 subprocess)也能被一并终止
加载配置并管理进程
每次修改 conf 文件后,必须重新加载配置:
sudo supervisorctl rereadsudo supervisorctl update
常用操作命令:
-
sudo supervisorctl status:查看所有进程状态 -
sudo supervisorctl start mybot:启动指定进程 -
sudo supervisorctl stop mybot:停止指定进程 -
sudo supervisorctl restart mybot:重启指定进程 -
sudo supervisorctl tail mybot:实时查看日志(类似 tail -f) -
sudo supervisorctl tail mybot stderr:查看标准错误流
调试常见问题
如果脚本启动失败但看不到报错,先检查:
- 日志文件权限是否允许 user 写入(
sudo chown www-data:www-data /var/log/supervisor/mybot.log) - 脚本是否有可执行权限或依赖环境(建议在 command 中显式激活虚拟环境,如:
command=/opt/myapp/venv/bin/python /opt/myapp/bot.py) - Python 路径是否正确(
which python3查看真实路径) - 使用
sudo supervisorctl status看状态是否为 FATAL 或 STARTING,再结合tail查日志定位
Supervisor 本身不支持热重载代码,改完脚本需手动 restart 进程生效。