Files
djangoadmin-wiki/DjangoAdmin_Django_EleVue/zh/volume6/supervisor.md
T
2026-09-13 17:33:13 +08:00

4.9 KiB
Raw Blame History

Supervisor进程管理

概述

Supervisor 是一个 Python 编写的进程管理工具,用于在 Linux 服务器上管理 Django 应用进程。它提供自动重启、日志管理、进程监控等功能,是生产环境部署的推荐方案之一。

:::tip 适用场景

  • Linux 服务器直接部署(非 Docker)
  • 需要进程自动重启和日志轮转
  • 管理多个相关进程 :::

配置文件示例

; Supervisor 进程管理配置
; 将 command / directory 替换为实际路径后复制到 /etc/supervisor/conf.d/

[program:djangoadmin]
; 启动命令:使用 gunicorn 运行 Django WSGI 应用
command=/path/to/venv/bin/gunicorn application.wsgi:application --bind 127.0.0.1:8000 --workers 4 --timeout 120
; 项目根目录
directory=/data/apps/DjangoAdmin_Django_EleVue
; 自动启动
autostart=true
; 异常退出后自动重启
autorestart=true
; 停止时终止子进程
stopasgroup=true
killasgroup=true
; 错误输出重定向到标准输出
redirect_stderr=true
; 日志文件
stdout_logfile=/path/to/logs/supervisor.out.log
; 日志轮转:单文件最大 50MB,保留 10 个备份
stdout_logfile_maxbytes=50MB
stdout_logfile_backups=10
; 环境变量
environment=PYTHONUNBUFFERED=1,DJANGO_SETTINGS_MODULE="application.settings"
; 启动等待时间
startsecs=10

:::tip 配置路径 将修改后的配置文件复制到 /etc/supervisor/conf.d/ 目录下,需修改三处路径:

# 1. 修改 command 中的虚拟环境路径和 gunicorn 路径
# 2. 修改 directory 为项目实际路径
# 3. 修改 stdout_logfile 为日志实际路径
cp deploy/supervisor.conf /etc/supervisor/conf.d/djangoadmin.conf

:::

安装 Supervisor

# Ubuntu/Debian
sudo apt-get install supervisor

# CentOS/RHEL
sudo yum install supervisor

# pip 安装
pip install supervisor

常用命令

进程管理

# 读取配置并启动进程
sudo supervisorctl reread
sudo supervisorctl update

# 启动进程
sudo supervisorctl start djangoadmin

# 停止进程
sudo supervisorctl stop djangoadmin

# 重启进程
sudo supervisorctl restart djangoadmin

# 查看进程状态
sudo supervisorctl status

# 停止所有进程
sudo supervisorctl stop all

# 重启所有进程
sudo supervisorctl restart all

服务管理

# 启动 Supervisor 服务
sudo systemctl start supervisord

# 停止 Supervisor 服务
sudo systemctl stop supervisord

# 设置开机自启
sudo systemctl enable supervisord

# 查看服务状态
sudo systemctl status supervisord

Gunicorn 配置说明

生产环境推荐使用 Gunicorn 作为 WSGI 服务器:

参数 说明 推荐值
--bind 绑定地址和端口 127.0.0.1:8000
--workers Worker 进程数 CPU核心数 * 2 + 1
--timeout 请求超时时间(秒) 120
--max-requests 单个 Worker 最大请求数(防内存泄漏) 1000
--max-requests-jitter 最大请求随机抖动 100
# 完整启动命令
gunicorn application.wsgi:application \
    --bind 127.0.0.1:8000 \
    --workers 4 \
    --timeout 120 \
    --max-requests 1000 \
    --max-requests-jitter 100

日志轮转

Supervisor 内置日志轮转功能,通过以下配置控制:

; 单个日志文件最大 50MB
stdout_logfile_maxbytes=50MB
; 保留 10 个历史日志文件
stdout_logfile_backups=10

:::tip 日志文件命名 当 stdout_logfile_maxbytes 达到上限时,Supervisor 自动轮转:

  • supervisor.out.log(当前日志)
  • supervisor.out.log.1(上一个)
  • supervisor.out.log.2(更早的)
  • ...最多保留 stdout_logfile_backups 个 :::

多进程管理

如需同时管理多个进程(如应用 + Celery Worker):

[program:djangoadmin]
command=/path/to/venv/bin/gunicorn application.wsgi:application --bind 127.0.0.1:8000 --workers 4
directory=/data/apps/DjangoAdmin_Django_EleVue
autostart=true
autorestart=true

[program:djangoadmin-celery]
command=/path/to/venv/bin/celery -A application worker -l info
directory=/data/apps/DjangoAdmin_Django_EleVue
autostart=true
autorestart=true
numprocs=2

常见问题

进程启动失败

# 查看详细错误日志
sudo supervisorctl tail -f djangoadmin

# 检查配置语法
sudo supervisorctl status

:::tip 常见原因

  1. Python 虚拟环境路径错误
  2. 项目目录路径错误
  3. 端口被占用
  4. .env 文件缺失或配置错误
  5. Gunicorn 未安装(pip install gunicorn) :::

进程频繁重启

# 查看退出原因
sudo supervisorctl tail djangoadmin stderr

# 调整启动等待时间(给应用足够的启动时间)
startsecs=10

总结

Supervisor 是 Linux 环境下管理 Django 进程的可靠方案,提供自动重启、日志轮转、进程监控等能力。生产环境推荐使用 Gunicorn 作为 WSGI 服务器,配合 Supervisor 管理进程。配置文件修改路径后复制到 /etc/supervisor/conf.d/ 即可使用。