diff --git a/.gitignore b/.gitignore index 9bcb4ac..45bf4f7 100644 --- a/.gitignore +++ b/.gitignore @@ -86,4 +86,7 @@ supervisor.conf *.ini # 日志目录 -/var/log/diary-family/ \ No newline at end of file +/var/log/diary-family/ + +# 测试文件 +test*.py* \ No newline at end of file diff --git a/README.md b/README.md index 892f646..f872521 100644 --- a/README.md +++ b/README.md @@ -396,7 +396,108 @@ def setup_daily_report_task(): - 检查邮件是否正常发送 - 在 Django 管理后台查看任务执行记录 -### 5. 常见问题排查 +### 5. 日志文件不存在问题解决方法 + +如果在生产服务器上执行 `tail -f /var/log/celery/worker.log` 时提示 `No such file or directory`,请按照以下步骤解决: + +#### 步骤1:检查日志目录是否存在 + +```bash +# 检查日志目录是否存在 +ls -la /var/log/celery/ + +# 如果目录不存在,创建目录 +sudo mkdir -p /var/log/celery/ + +# 设置正确的权限(确保 Celery 进程用户有读写权限) +sudo chown -R www-data:www-data /var/log/celery/ +sudo chmod -R 755 /var/log/celery/ +``` + +#### 步骤2:检查 Supervisor 配置 + +确保 Supervisor 配置文件中指定的日志路径正确,并且 Celery 进程用户对该路径有读写权限。 + +#### 步骤3:重启 Supervisor 和 Celery + +```bash +sudo supervisorctl reread +sudo supervisorctl update +sudo supervisorctl restart celery_worker celery_beat +``` + +### 6. 试运行周期任务 + +当设置一个周期任务后,您可以通过以下方式试运行任务,而不需要等待到指定的时间: + +#### 方式1:通过 Django 管理后台 + +1. 登录 Django 管理后台(/houtai) +2. 找到 **Periodic tasks**(周期性任务) +3. 选择您创建的任务 +4. 点击页面底部的 **Run Task** 按钮立即执行任务 + +#### 方式2:通过命令行 + +```bash +# 直接调用任务函数(同步执行) +python manage.py shell -c "from core.tasks import generate_daily_pdf_report; generate_daily_pdf_report()" + +# 或者使用 Celery 命令行工具 +celery -A diary_family call core.tasks.generate_daily_pdf_report +``` + +#### 方式3:使用测试脚本 + +项目提供了一个测试脚本,用于验证 Celery 任务是否可以正常运行: + +```bash +# 运行测试脚本 +python test_celery.py +``` + +### 7. 常见错误和解决方法 + +#### 错误1:日志文件不存在 + +**错误信息**:`tail: cannot open '/var/log/celery/worker.log' for reading: No such file or directory` + +**解决方法**: +- 按照步骤5中的说明创建日志目录并设置正确权限 +- 检查 Supervisor 配置中的日志路径是否正确 +- 重启 Supervisor 和 Celery 服务 + +#### 错误2:Celery 无法连接到 Redis + +**错误信息**:`redis.exceptions.ConnectionError: Error 111 connecting to localhost:6379. Connection refused.` + +**解决方法**: +- 检查 Redis 服务是否正常运行:`sudo systemctl status redis-server` +- 启动 Redis 服务:`sudo systemctl start redis-server` +- 检查 Redis 配置是否允许本地连接 + +#### 错误3:任务执行失败 + +**错误信息**:`Task core.tasks.generate_daily_pdf_report[xxx] raised unexpected: Exception(...)` + +**解决方法**: +- 查看详细日志:`tail -f /var/log/celery/worker.log` +- 检查任务代码中的错误 +- 确保所有依赖库都已正确安装 +- 检查相关服务(如数据库、Redis)是否正常运行 + +#### 错误4:PDF 生成失败 + +**错误信息**:`WeasyPrint库不可用,无法生成PDF报告` + +**解决方法**: +- 安装 WeasyPrint 库:`pip install weasyprint` +- 对于 Ubuntu 系统,可能需要安装系统依赖: + ```bash + sudo apt-get install -y libpango-1.0-0 libpangoft2-1.0-0 + ``` + +### 8. 常见问题排查 1. **任务不执行** - 检查 Celery worker 和 beat 是否正常运行