Supervisor是Python编写的进程管理工具,用于管理和监控后台进程。与systemd相比,Supervisor配置更简单,支持Web管理界面,适合管理多个应用进程。本文介绍在搬瓦工VPS上安装和使用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
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
Tip: 更多教程请查看新手教程。