Supervisor管理后台进程教程


Supervisor是Python编写的进程管理工具,用于管理和监控后台进程。与systemd相比,Supervisor配置更简单,支持Web管理界面,适合管理多个应用进程。本文介绍在搬瓦工VPS上安装和使用Supervisor的完整教程。

安装Supervisor

Debian/Ubuntu 系统:

sudo apt update
sudo apt install supervisor -y

# 启动并设置开机自启
sudo systemctl enable supervisor
sudo systemctl start supervisor

# 查看版本
supervisord -v

CentOS/AlmaLinux 系统:

sudo yum install epel-release -y
sudo yum install supervisor -y
sudo systemctl enable supervisord
sudo systemctl start supervisord

通过pip安装(获取最新版本):

sudo pip3 install supervisor

# 生成默认配置文件
echo_supervisord_conf | sudo tee /etc/supervisord.conf

# 创建配置目录
sudo mkdir -p /etc/supervisor/conf.d

主配置文件

Supervisor的主配置文件通常在 /etc/supervisor/supervisord.conf,确认末尾包含以下内容以加载子配置:

[include]
files = /etc/supervisor/conf.d/*.conf

添加进程配置

为每个需要管理的进程创建配置文件:

sudo nano /etc/supervisor/conf.d/myapp.conf
[program:myapp]
; 启动命令
command=/var/www/myapp/venv/bin/gunicorn -c gunicorn.conf.py app:app

; 工作目录
directory=/var/www/myapp

; 运行用户
user=www-data

; 自动启动和重启
autostart=true
autorestart=true

; 重试次数和间隔
startretries=3
startsecs=5

; 停止信号和超时
stopsignal=TERM
stopwaitsecs=10

; 进程数(numprocs > 1 时需要设置 process_name)
numprocs=1

; 日志文件
stdout_logfile=/var/log/supervisor/myapp-stdout.log
stderr_logfile=/var/log/supervisor/myapp-stderr.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=5
stderr_logfile_maxbytes=10MB
stderr_logfile_backups=5

; 环境变量
environment=NODE_ENV="production",PORT="3000"

; 优先级(数字越小越先启动)
priority=10

多进程配置示例:

[program:celery-worker]
command=/var/www/myapp/venv/bin/celery -A tasks worker --loglevel=info
directory=/var/www/myapp
user=www-data
numprocs=2
process_name=%(program_name)s_%(process_num)02d
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/celery-%(process_num)02d.log
stderr_redirect_stderr=true

进程分组

将相关进程分为一组,方便统一管理:

[group:webapp]
programs=myapp,celery-worker
priority=10
# 启动整个组
supervisorctl start webapp:*

# 停止整个组
supervisorctl stop webapp:*

# 重启整个组
supervisorctl restart webapp:*

常用管理命令

# 重新读取配置(不影响已运行的进程)
sudo supervisorctl reread

# 更新配置(启动新添加的、停止已删除的进程)
sudo supervisorctl update

# 查看所有进程状态
sudo supervisorctl status

# 启动/停止/重启指定进程
sudo supervisorctl start myapp
sudo supervisorctl stop myapp
sudo supervisorctl restart myapp

# 启动/停止所有进程
sudo supervisorctl start all
sudo supervisorctl stop all

# 查看进程日志(实时输出)
sudo supervisorctl tail -f myapp stdout
sudo supervisorctl tail -f myapp stderr

# 进入交互式命令行
sudo supervisorctl

Web管理界面

Supervisor内置了Web管理界面,可以通过浏览器查看和管理进程。在主配置文件中添加:

sudo nano /etc/supervisor/supervisord.conf
[inet_http_server]
port=127.0.0.1:9001
username=admin
password=your-secure-password
# 重启Supervisor使配置生效
sudo systemctl restart supervisor

# 通过Nginx代理访问Web界面
# location /supervisor/ {
#     proxy_pass http://127.0.0.1:9001/;
#     auth_basic "Supervisor";
#     auth_basic_user_file /etc/nginx/.htpasswd;
# }
Tip: Web界面不要直接暴露到公网,应通过Nginx代理并添加访问认证,或仅绑定127.0.0.1通过SSH隧道访问。

实际应用示例

管理Go语言应用:

[program:goapp]
command=/opt/goapp/myapp
directory=/opt/goapp
user=www-data
autostart=true
autorestart=true
environment=GIN_MODE="release"
stdout_logfile=/var/log/supervisor/goapp.log
stderr_redirect_stderr=true

管理Node.js应用:

[program:nodeapp]
command=/home/user/.nvm/versions/node/v20.0.0/bin/node app.js
directory=/var/www/nodeapp
user=www-data
autostart=true
autorestart=true
environment=NODE_ENV="production",PORT="3000"
stdout_logfile=/var/log/supervisor/nodeapp.log
stderr_redirect_stderr=true

管理Redis队列Worker:

[program:queue-worker]
command=/var/www/myapp/venv/bin/python manage.py rqworker
directory=/var/www/myapp
user=www-data
numprocs=3
process_name=%(program_name)s_%(process_num)02d
autostart=true
autorestart=true
stdout_logfile=/var/log/supervisor/worker-%(process_num)02d.log

Supervisor vs Systemd

Tip: 更多教程请查看新手教程
关于本站

搬瓦工VPS中文网(bwgvps.com)是非官方中文信息站,整理搬瓦工 BandwagonHost 的优惠信息、使用教程和方案对比,方便中文用户选购和使用。

新手必读
搬瓦工优惠码

当前最大折扣优惠码:

NODESEEK2026(优惠 6.77%)

在购买方案时填入优惠码即可自动抵扣。详见 优惠码使用教程