我使用 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 点两个时间都执行,这个任务就正常执行了。。。非常不理解)
1 misoomang 73 天前 ![]() 可以查看下 django_celery_beat_periodictask 表中相关任务的数据情况 另外可以看下 celery-beat 的任务是否有在持续在指定时间发送 Scheduler: Sending due task xxx 的任务 |
![]() | 2 RyougiShiki 73 天前 开日志排查。推荐个 django 定时任务库 https://digon.io/hyd/project/scheduler/t/master/readme.html ,简单、体验不错,小众 star 数少、暂时没发现大问题。 |
![]() | 3 Hopetree OP @misoomang @RyougiShiki 日志我看了,我还开了 debug ,到了时间其他的任务是有发送任务给 work 的,但是上面没有执行就没有发送的日志,就感觉是完全没有触发一样,离谱至极 |
![]() | 5 lambdaq 73 天前 ![]() 当你遇到一个任务调度问题,选 celery ,那么恭喜你,变成 2 个问题了。。。 |
![]() | 6 ruanimal 73 天前 时区问题吧 |
![]() | 7 cz5424 72 天前 via iPhone 如果 Docker 下要装时区依赖 |
8 fzjwdd 72 天前 ``` enable_utc=False ``` 改成这样试试。 |
![]() | 9 Hopetree OP 貌似发现了问题,是容器 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 的时间处理会跟这两个有关? |
![]() | 11 Hopetree OP @julyclyde 感谢提醒,我后续的容器镜像都会按照上面的操作做,这次遇到的定时任务事情搞了我一个周末都没定位出来,虽然我也是一直是往时区方向排查,并且排查过容器本地的时区,只是一直不知道要去设置/etc/timezone |
![]() | 12 yb2313 72 天前 任务调度我选 dagaster |