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

Django Celery如何实现定时任务在指定精确时间点执行?

Django Celery 每日凌晨3:20定时任务配置方案

核心cron规则说明

你需要的固定每天3:20执行的cron规则为 20 3 * * *,对应Celery的crontab配置参数直接传minute=20、hour=3即可。
cron表达式从左到右五个字段的含义分别是:分 时 日 月 周,上述规则代表任意日期、任意月份、任意星期的3点20分,完全匹配你的精确时间需求。

完整配置步骤

  • 第一步:安装依赖包django-celery-beat,这是Django整合Celery定时任务的官方组件,安装命令:
    pip install django-celery-beat
    
  • 第二步:修改Django项目的settings.py配置:
    1. 将django_celery_beat加入INSTALLED_APPS列表
    2. 新增Celery定时调度及时区配置,确保Django和Celery时区一致,避免时间偏移:
      TIME_ZONE = 'Asia/Shanghai'
      USE_TZ = True
      CELERY_TIMEZONE = TIME_ZONE
      CELERY_BEAT_SCHEDULER = 'django_celery_beat.schedulers:DatabaseScheduler'
      
    3. 配置定时任务规则,示例如下:
      from celery.schedules import crontab
      
      CELERY_BEAT_SCHEDULE = {
          'daily_task_at_3_20': {
              'task': 'your_app.tasks.your_custom_task', # 替换为你实际的任务路径
              'schedule': crontab(minute=20, hour=3), # 对应3:20的cron规则
              # 如有传参需求可新增args字段,示例:'args': (param1, param2)
          }
      }
      
  • 第三步:执行数据库迁移,django-celery-beat需要创建数据表存储定时任务相关数据,迁移命令:
    python manage.py migrate
    
  • 第四步:启动服务,需要同时运行Celery worker(执行任务)和Celery beat(调度任务):
    启动worker命令:celery -A 你的项目名 worker --loglevel=info
    启动beat命令:celery -A 你的项目名 beat --loglevel=info
    生产环境建议用systemd等守护进程托管两个服务,避免进程意外退出。

补充说明

如果你需要的是间隔24小时执行,而非固定在每日3:20,可以将schedule配置改为timedelta(hours=24)即可,注意这种方式是从beat服务启动时间开始计算间隔,不会固定到凌晨3点20分执行,按需选择即可。

内容的提问来源于stack exchange,提问作者Rin

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 15:15:01