一聚教程网:一个值得你收藏的教程网站

热门教程

服务器管理如何使用 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
  1. command:实际要运行的命令,建议写绝对路径
  2. directory:切换到该目录再执行,避免路径相关错误
  3. user:指定运行用户,不要用 root,推荐 www-data 或专用低权限用户
  4. autorestart:进程退出后自动重启(包括异常退出和正常退出)
  5. stdout_logfile:必须指定日志路径,Supervisor 不会自动创建目录,需提前 sudo mkdir -p /var/log/supervisor
  6. stopasgroup/killasgroup:确保子进程(如 bot 启动的 subprocess)也能被一并终止

加载配置并管理进程

每次修改 conf 文件后,必须重新加载配置:

sudo supervisorctl rereadsudo supervisorctl update

常用操作命令:

  1. sudo supervisorctl status:查看所有进程状态
  2. sudo supervisorctl start mybot:启动指定进程
  3. sudo supervisorctl stop mybot:停止指定进程
  4. sudo supervisorctl restart mybot:重启指定进程
  5. sudo supervisorctl tail mybot:实时查看日志(类似 tail -f)
  6. sudo supervisorctl tail mybot stderr:查看标准错误流

调试常见问题

如果脚本启动失败但看不到报错,先检查:

  1. 日志文件权限是否允许 user 写入(sudo chown www-data:www-data /var/log/supervisor/mybot.log
  2. 脚本是否有可执行权限或依赖环境(建议在 command 中显式激活虚拟环境,如:command=/opt/myapp/venv/bin/python /opt/myapp/bot.py
  3. Python 路径是否正确(which python3 查看真实路径)
  4. 使用 sudo supervisorctl status 看状态是否为 FATALSTARTING,再结合 tail 查日志定位

Supervisor 本身不支持热重载代码,改完脚本需手动 restart 进程生效。

热门栏目