前言
在最近的使用中,感觉到这个apscheduler非常的好用,但是吧,一切美好的想象就停留在了部署的那天….
我本以为一切如我所愿,按照我预期的运行,于是我在开启了一个定时任务后,满怀期待的等待着,只要他执行,我就可以下班走人了,但是,时间到了之后,他还是没有执行,于是我就意识到,事情开始往我意想不到的方向发展了。
我在查看了redis之后,发现,他的任务还在,并没有报错,只是时间是在八小时之后,哎,我这才意识到是时区的问题。那,废话不多说,直接开始上代码。
解决方案
直接在添加任务处指定时区,如下:
# 这样的话,就是utc时间了。 schedudler.add_job(worker,'cron',day="*/1", timezone=pytz.utc) # 改为下面这个时区,就是亚洲上海,与我们时间一致,也就能最好的解决这个问题 timezone=pytz.timezone('Asia/Shanghai')
还有一种方法,就是更改你的系统和docker的时区,因为apscheduler的时间是根据你本机的时区来进行的。
1: 以ubuntu为例,更改时区
date -R
或者timedatectl status
都能查看时区,然后修改时区timedatectl set-timezone "Asia/Shanghai"
2: 修改docker的时区
这个呢,可以在启动容器时将本地的时区文件挂载映射,看起来像是这样:
docker run -v /etc/timezone:/etc/timezone -v /etc/localtime:/etc/localtime -it ubuntu bash
或者直接在dockerfile中添加上
RUN cp /usr/share/zoneinfo/Asia/Shanghai /etc/localtime && echo 'Asia/Shanghai' >/etc/timezone
问题完美解决
- Post link: https://www.godhearing.cn/apscheduler-she-zhi-shi-qu/
- Copyright Notice: All articles in this blog are licensed under unless otherwise stated.