Django项目添加django-crontab后Celery容器异常退出及日志缺失求助
问题1:Celery容器启动报错
ModuleNotFoundError: No module named 'django_crontab' - 重新构建Celery服务镜像,确保依赖安装完整:
(如果之前构建镜像时docker compose build --no-cache celeryrequirements.txt还未添加django-crontab,镜像中不会包含该依赖,重新构建会读取最新依赖列表完成安装) - 验证Celery命令的模块路径:
确认celery -A projectDIR worker -l INFO中的projectDIR是包含settings.py的Django项目根模块名称。若项目结构为/apps/projectDIR/settings.py则命令正确;若settings.py直接在/apps目录下,需调整命令为celery -A . worker -l INFO。
问题2:django-crontab定时任务存在但日志文件未生成
- 启动容器内的cron服务:
修改docker-compose.yml中web服务的启动命令,同时启动cron和Django服务:command: bash -c "service cron start && python manage.py runserver 0:8030" - 检查日志路径配置:
在settings.py的CRONJOBS中指定容器内可写的日志路径,例如:
若需将日志同步到本地,可在web服务的CRONJOBS = [ ('*/5 * * * *', 'myapp.tasks.my_task', '>> /apps/crontab.log 2>&1') ]volumes中添加日志目录挂载:
再将日志路径改为volumes: - ./projectDIR:/apps - ./logs:/apps/logs/apps/logs/crontab.log - 重新注册定时任务:
进入web容器执行以下命令,确保任务正确注册到cron:python manage.py crontab remove python manage.py crontab add
额外优化建议
- 移除
docker-compose.yml中的links配置,改用depends_on即可(links为Docker旧特性) - Celery服务无需依赖web服务,仅需依赖redis和db,可调整
depends_on配置 - 确保所有容器通过
.env文件正确加载数据库、Redis等连接配置
内容的提问来源于stack exchange,提问作者baloersch
相关产品推荐
相关产品推荐

