我使用 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 4 天前 ![]() 可以查看下 django_celery_beat_periodictask 表中相关任务的数据情况
另外可以看下 celery-beat 的任务是否有在持续在指定时间发送 Scheduler: Sending due task xxx 的任务 |
![]() |
2
RyougiShiki 4 天前
开日志排查。推荐个 django 定时任务库 https://digon.io/hyd/project/scheduler/t/master/readme.html ,简单、体验不错,小众 star 数少、暂时没发现大问题。
|
![]() |
3
Hopetree OP @misoomang @RyougiShiki 日志我看了,我还开了 debug ,到了时间其他的任务是有发送任务给 work 的,但是上面没有执行就没有发送的日志,就感觉是完全没有触发一样,离谱至极
|
![]() |
5
lambdaq 4 天前 ![]() 当你遇到一个任务调度问题,选 celery ,那么恭喜你,变成 2 个问题了。。。
|
![]() |
6
ruanimal 4 天前
时区问题吧
|
![]() |
7
cz5424 3 天前 via iPhone
如果 Docker 下要装时区依赖
|
8
fzjwdd 3 天前
```
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 3 天前
任务调度我选 dagaster
|