关于 Django 使用 celery 定时任务的奇葩现象 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
请不要在回答技术问题时复制粘贴 AI 生成的内容
Hopetree
V2EX    程序员

关于 Django 使用 celery 定时任务的奇葩现象

  • /li>  
  •   Hopetree
    Hopetree 73 天前 1885 次点击
    这是一个创建于 73 天前的主题,其中的信息可能已经有所发展或是发生改变。

    我使用 django-celery-beat 创建了一些定时任务,大概如图,但是很奇怪的是有 3 个任务没有按照预定的 crontab 规则执行,其他都正常。先排除任务本身的问题,以为我试过修改定时任务策略,没有执行的任务可以执行。

    首先我说一下我的关键配置:

    TIME_ZOnE= 'Asia/Shanghai' USE_TZ = True CELERY_TIMEZOnE= 'Asia/Shanghai' CELERY_ENABLE_UTC = True

    也就是启用 UTC 时间,然后本地使用北京时间。

    ChatGPT 一直让我排查时区问题,我也照做了,但是一直没解决,毕竟按照上面的现象,如果是时区问题,为什么其他的任务正常?我无法理解这个现象,特别是 9:50 执行的任务,其他 9:35 和 9:40 的都正常。

    有人遇到过类似的问题吗?

    (另外补充:我发现我把 9:50 的任务改成 9 点和 16 点两个时间都执行,这个任务就正常执行了。。。非常不理解)

    14 条回复    2025-07-29 16:03:58 +08:00
    misoomang
        1
    misoomang  
       73 天前   1
    可以查看下 django_celery_beat_periodictask 表中相关任务的数据情况

    另外可以看下 celery-beat 的任务是否有在持续在指定时间发送 Scheduler: Sending due task xxx 的任务
    RyougiShiki
        2
    RyougiShiki  
       73 天前
    开日志排查。推荐个 django 定时任务库 https://digon.io/hyd/project/scheduler/t/master/readme.html ,简单、体验不错,小众 star 数少、暂时没发现大问题。
    Hopetree
        3
    Hopetree  
    OP
       73 天前
    @misoomang @RyougiShiki 日志我看了,我还开了 debug ,到了时间其他的任务是有发送任务给 work 的,但是上面没有执行就没有发送的日志,就感觉是完全没有触发一样,离谱至极
    misoomang
        4
    misoomang  
       73 天前
    @Hopetree 表里的数据情况也是需要确认下,对应任务是否在表中。另外是不是一次性任务
    lambdaq
        5
    lambdaq  
       73 天前   4
    当你遇到一个任务调度问题,选 celery ,那么恭喜你,变成 2 个问题了。。。
    ruanimal
        6
    ruanimal  
       73 天前
    时区问题吧
    cz5424
        7
    cz5424  
       72 天前 via iPhone
    如果 Docker 下要装时区依赖
    fzjwdd
        8
    fzjwdd  
       72 天前
    ```
    enable_utc=False
    ```
    改成这样试试。
    Hopetree
        9
    Hopetree  
    OP
       72 天前
    貌似发现了问题,是容器 Dockerfile 关于时区配置的操作问题,这是原本的操作:

    RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime

    这是让 ChatGPT 给的操作:
    ENV TZ=Asia/Shanghai
    RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

    改完之后我发现定时任务能正常了,有点不理解,安装我之前的操作执行 date 命令也是北京时间啊,下面这个操作貌似就是多了两个信息,一个是 TZ 环境变量,然后是/etc/timezone 文件内容,貌似 celery 的时间处理会跟这两个有关?
    julyclyde
        10
    julyclyde  
       72 天前
    @Hopetree 处理时间和 TZ 有关是很理所当然的事情

    而且其实你上述两个步骤其中之一就足够(当然,俩都做了也不算错)
    Hopetree
        11
    Hopetree  
    OP
       72 天前
    @julyclyde 感谢提醒,我后续的容器镜像都会按照上面的操作做,这次遇到的定时任务事情搞了我一个周末都没定位出来,虽然我也是一直是往时区方向排查,并且排查过容器本地的时区,只是一直不知道要去设置/etc/timezone
    yb2313
        12
    yb2313  
       72 天前
    任务调度我选 dagaster
    julyclyde
        13
    julyclyde  
       72 天前
    @Hopetree 最好把其他的( celery 之外)所有容器都检查一下

    之前听说过一些实践,所有后台全都 utc ,到和用户交互的时候再 locale
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     896 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 24ms UTC 19:59 PVG 03:59 LAX 12:59 JFK 15:59
    Do have faith in what you're doing.
    ubao snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86