You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Django项目添加django-crontab后Celery容器异常退出及日志缺失求助

问题1:Celery容器启动报错ModuleNotFoundError: No module named 'django_crontab'
  • 重新构建Celery服务镜像,确保依赖安装完整:
    docker compose build --no-cache celery
    
    (如果之前构建镜像时requirements.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中指定容器内可写的日志路径,例如:
    CRONJOBS = [
        ('*/5 * * * *', 'myapp.tasks.my_task', '>> /apps/crontab.log 2>&1')
    ]
    
    若需将日志同步到本地,可在web服务的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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 17:52:22