签入版本
This commit is contained in:
@@ -0,0 +1,203 @@
|
||||
# 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/` 即可使用。
|
||||
Reference in New Issue
Block a user