Files
djangoadmin-wiki/DjangoAdmin_Django_AntdVue/zh/volume6/supervisor.md
T
2026-09-12 23:12:15 +08:00

204 lines
4.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Supervisor进程管理
## 概述
Supervisor 是一个 Python 编写的进程管理工具,用于在 Linux 服务器上管理 Django 应用进程。它提供自动重启、日志管理、进程监控等功能,是生产环境部署的推荐方案之一。
:::tip 适用场景
- Linux 服务器直接部署(非 Docker)
- 需要进程自动重启和日志轮转
- 管理多个相关进程
:::
## 配置文件示例
```ini
; 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/` 目录下,需修改三处路径:
```bash
# 1. 修改 command 中的虚拟环境路径和 gunicorn 路径
# 2. 修改 directory 为项目实际路径
# 3. 修改 stdout_logfile 为日志实际路径
cp deploy/supervisor.conf /etc/supervisor/conf.d/djangoadmin.conf
```
:::
## 安装 Supervisor
```bash
# Ubuntu/Debian
sudo apt-get install supervisor
# CentOS/RHEL
sudo yum install supervisor
# pip 安装
pip install supervisor
```
## 常用命令
### 进程管理
```bash
# 读取配置并启动进程
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
```
### 服务管理
```bash
# 启动 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` |
```bash
# 完整启动命令
gunicorn application.wsgi:application \
--bind 127.0.0.1:8000 \
--workers 4 \
--timeout 120 \
--max-requests 1000 \
--max-requests-jitter 100
```
## 日志轮转
Supervisor 内置日志轮转功能,通过以下配置控制:
```ini
; 单个日志文件最大 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):
```ini
[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
```
## 常见问题
### 进程启动失败
```bash
# 查看详细错误日志
sudo supervisorctl tail -f djangoadmin
# 检查配置语法
sudo supervisorctl status
```
:::tip 常见原因
1. Python 虚拟环境路径错误
2. 项目目录路径错误
3. 端口被占用
4. `.env` 文件缺失或配置错误
5. Gunicorn 未安装(`pip install gunicorn`)
:::
### 进程频繁重启
```bash
# 查看退出原因
sudo supervisorctl tail djangoadmin stderr
# 调整启动等待时间(给应用足够的启动时间)
startsecs=10
```
## 总结
Supervisor 是 Linux 环境下管理 Django 进程的可靠方案,提供自动重启、日志轮转、进程监控等能力。生产环境推荐使用 Gunicorn 作为 WSGI 服务器,配合 Supervisor 管理进程。配置文件修改路径后复制到 `/etc/supervisor/conf.d/` 即可使用。