Files
djangoadmin-wiki/DjangoAdmin_Flask_EleVue/zh/volume6/supervisor.md
T
2026-09-13 20:29:19 +08:00

196 lines
4.4 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 服务器上管理 Flask 应用进程。它提供自动重启、日志管理、进程监控等功能,是生产环境部署的推荐方案之一。
:::tip 适用场景
- Linux 服务器直接部署(非 Docker)
- 需要进程自动重启和日志轮转
- 管理多个相关进程
:::
## 配置文件示例
以下为推荐的 Supervisor 配置模板,按需修改后保存到 `/etc/supervisor/conf.d/`:
```ini
; Supervisor 进程管理示例配置
; 将 command / directory 替换为实际路径后复制到 /etc/supervisor/conf.d/
[program:djangoadmin-flask]
; 启动命令:使用 gunicorn WSGI 服务器
command=/path/to/venv/bin/gunicorn -w 4 -b 127.0.0.1:8021 app:app
; 项目根目录
directory=/data/apps/djangoadmin
; 自动启动
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
```
:::tip 配置路径
将修改后的配置文件复制到 `/etc/supervisor/conf.d/` 目录下,需修改两处路径:
```bash
# 1. 修改 command 中的虚拟环境路径
# 2. 修改 directory 为项目实际路径
# 3. 修改 stdout_logfile 为日志实际路径
# 将上方配置保存为 /etc/supervisor/conf.d/djangoadmin-flask.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-flask
# 停止进程
sudo supervisorctl stop djangoadmin-flask
# 重启进程
sudo supervisorctl restart djangoadmin-flask
# 查看进程状态
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
```
## 日志轮转
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` 个
:::
## Web 管理界面
Supervisor 提供可选的 Web 管理界面:
```ini
[inet_http_server]
port=127.0.0.1:9001
username=admin
password=your_password
```
:::warning 安全提醒
Web 界面仅监听 127.0.0.1,禁止暴露到公网。如需远程访问,应通过 SSH 隧道或 VPN。
:::
## 多进程管理
如需同时管理多个进程(如应用 + Celery Worker):
```ini
[program:djangoadmin-flask]
command=/path/to/venv/bin/gunicorn -w 4 -b 127.0.0.1:8021 app:app
directory=/data/apps/djangoadmin
autostart=true
autorestart=true
[program:djangoadmin-worker]
command=/path/to/venv/bin/celery -A tasks worker
directory=/data/apps/djangoadmin
autostart=true
autorestart=true
numprocs=4
```
## 常见问题
### 进程启动失败
```bash
# 查看详细错误日志
sudo supervisorctl tail -f djangoadmin-flask
# 检查配置语法
sudo supervisorctl status
```
:::tip 常见原因
1. Python 虚拟环境路径错误
2. 项目目录路径错误
3. 端口被占用
4. `.env` 文件缺失或配置错误
:::
### 进程频繁重启
```bash
# 查看退出原因
sudo supervisorctl tail djangoadmin-flask stderr
# 调整启动等待时间(给应用足够的启动时间)
startsecs=10
```
## 总结
Supervisor 是 Linux 环境下管理 Flask 进程的可靠方案,提供自动重启、日志轮转、进程监控等能力。按上方模板创建配置文件,修改路径后复制到 `/etc/supervisor/conf.d/` 即可使用。生产环境建议配合 systemd 管理 Supervisor 自身的启动。