docs: 添加 Celery 定时发送邮件任务配置文档
添加详细的 Celery 定时任务配置指南,包括邮件设置、Celery 启动方式、定时任务配置方法、问题排查和生产环境优化建议
This commit is contained in:
155
README.md
155
README.md
@@ -282,6 +282,161 @@ sudo systemctl restart nginx
|
||||
- 邮件发送时间
|
||||
- 收件人邮箱
|
||||
|
||||
## Celery 定时发送邮件任务配置
|
||||
|
||||
### 1. 邮件配置设置
|
||||
|
||||
在系统配置页面设置完邮件信息后,还需要在 Django 项目的 settings.py 中添加基础邮件配置:
|
||||
|
||||
```python
|
||||
# 邮件基础配置
|
||||
EMAIL_BACKEND = 'django.core.mail.backends.smtp.EmailBackend'
|
||||
EMAIL_PORT = 587 # 或根据你的 SMTP 服务器设置
|
||||
EMAIL_USE_TLS = True # 或根据你的 SMTP 服务器设置
|
||||
```
|
||||
|
||||
### 2. 启动 Celery Worker 和 Beat
|
||||
|
||||
#### 开发环境
|
||||
|
||||
```bash
|
||||
# 启动 Celery Worker
|
||||
celery -A diary_family worker -l info
|
||||
|
||||
# 启动 Celery Beat(用于定时任务调度)
|
||||
celery -A diary_family beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
|
||||
```
|
||||
|
||||
#### 生产环境
|
||||
|
||||
建议使用 supervisor 管理 Celery 进程。创建两个 supervisor 配置文件:
|
||||
|
||||
1. **celery_worker.conf**
|
||||
```ini
|
||||
[program:celery_worker]
|
||||
command=/path/to/venv/bin/celery -A diary_family worker -l info
|
||||
directory=/path/to/diary-family
|
||||
user=www-data
|
||||
group=www-data
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stdout_logfile=/var/log/celery/worker.log
|
||||
stderr_logfile=/var/log/celery/worker_error.log
|
||||
```
|
||||
|
||||
2. **celery_beat.conf**
|
||||
```ini
|
||||
[program:celery_beat]
|
||||
command=/path/to/venv/bin/celery -A diary_family beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
|
||||
directory=/path/to/diary-family
|
||||
user=www-data
|
||||
group=www-data
|
||||
autostart=true
|
||||
autorestart=true
|
||||
stdout_logfile=/var/log/celery/beat.log
|
||||
stderr_logfile=/var/log/celery/beat_error.log
|
||||
```
|
||||
|
||||
启动 supervisor 服务:
|
||||
```bash
|
||||
sudo supervisorctl reread
|
||||
sudo supervisorctl update
|
||||
sudo supervisorctl start celery_worker
|
||||
sudo supervisorctl start celery_beat
|
||||
```
|
||||
|
||||
### 3. 配置定时任务
|
||||
|
||||
系统使用 `django_celery_beat` 进行定时任务管理,支持两种方式配置:
|
||||
|
||||
#### 方式一:通过 Django 管理后台(推荐)
|
||||
|
||||
1. 登录 Django 管理后台(/houtai)
|
||||
2. 找到 **Periodic tasks**(周期性任务)
|
||||
3. 点击 **Add** 按钮添加新任务
|
||||
4. 配置任务:
|
||||
- **Name**: 任务名称(如:每日报告发送)
|
||||
- **Task (registered)**: 选择 `core.tasks.send_daily_report`
|
||||
- **Interval**: 设置执行间隔(如:每天)
|
||||
- **Enabled**: 勾选启用
|
||||
5. 点击 **Save** 保存
|
||||
|
||||
#### 方式二:通过代码配置
|
||||
|
||||
在 `core/tasks.py` 中添加定时任务配置:
|
||||
|
||||
```python
|
||||
from celery import shared_task
|
||||
from django_celery_beat.models import PeriodicTask, IntervalSchedule
|
||||
|
||||
# 创建或更新定时任务
|
||||
def setup_daily_report_task():
|
||||
# 创建每天执行的间隔
|
||||
schedule, created = IntervalSchedule.objects.get_or_create(
|
||||
every=1,
|
||||
period=IntervalSchedule.DAYS,
|
||||
)
|
||||
|
||||
# 创建或更新定时任务
|
||||
task, created = PeriodicTask.objects.update_or_create(
|
||||
name='Daily Report Task',
|
||||
defaults={
|
||||
'interval': schedule,
|
||||
'task': 'core.tasks.send_daily_report',
|
||||
},
|
||||
)
|
||||
return task
|
||||
```
|
||||
|
||||
然后在 Django 启动时调用此函数(如在 `core/apps.py` 中)。
|
||||
|
||||
### 4. 验证任务执行
|
||||
|
||||
- 查看 Celery 日志:`tail -f /var/log/celery/worker.log`
|
||||
- 检查邮件是否正常发送
|
||||
- 在 Django 管理后台查看任务执行记录
|
||||
|
||||
### 5. 常见问题排查
|
||||
|
||||
1. **任务不执行**
|
||||
- 检查 Celery worker 和 beat 是否正常运行
|
||||
- 检查 Redis 服务是否正常
|
||||
- 检查任务是否已启用
|
||||
- 检查系统时间是否正确
|
||||
|
||||
2. **邮件发送失败**
|
||||
- 检查 SMTP 服务器配置是否正确
|
||||
- 检查邮箱账号密码是否正确
|
||||
- 检查收件人邮箱格式是否正确
|
||||
- 查看 Celery 日志中的错误信息
|
||||
|
||||
3. **任务执行延迟**
|
||||
- 检查系统负载是否过高
|
||||
- 考虑增加 Celery worker 数量
|
||||
- 检查 Redis 性能
|
||||
|
||||
### 6. 生产环境优化建议
|
||||
|
||||
- 使用独立的 Redis 服务器
|
||||
- 配置合适的 worker 数量(建议:CPU 核心数 × 2)
|
||||
- 定期清理 Celery 任务结果
|
||||
- 配置监控系统(如 Prometheus + Grafana)
|
||||
- 启用 Celery 监控工具(如 Flower)
|
||||
|
||||
## Celery 监控(可选)
|
||||
|
||||
使用 Flower 监控 Celery 任务:
|
||||
|
||||
```bash
|
||||
# 安装 Flower
|
||||
pip install flower
|
||||
|
||||
# 启动 Flower
|
||||
celery -A diary_family flower --port=5555
|
||||
```
|
||||
|
||||
访问 http://your-server:5555 查看任务监控界面。
|
||||
|
||||
## 注意事项
|
||||
|
||||
1. 定期备份数据库
|
||||
|
||||
Reference in New Issue
Block a user