记一次xxljob定时任务没有触发的问题

编程

当初选了xxl-job就是因为它的触发机制比较靠谱,到点准时发,而且有日志可以看。

昨天突然发现部署在一台本地机器上的xxl-job到点并没有触发,且没有任何日志。通过管理页面查询触发日志,发现日志还是有的,只是和筛选条件不甚匹配。比如选取了昨天的日志,结果集中包含了今天早间的内容。初步怀疑是因为时差问题导致未能触发。

查看该机器上xxl-job对应的数据库,datetime类型的数据存储的都是标准时间,而我本地数据库中对应的是北京时间。尝试配置数据库时区:

show variables like "%time_zone%";

根据百度结果,CST可能会造成时区的混乱,所以手动将time_zone改为北京时间:

SET GLOBAL time_zone = "+08:00";

SET time_zone = "+08:00";

FLUSH PRIVILEGES;

修改结果如:

然并卵,日志的日期依然不能和筛选条件相匹配。

点开xxl_job_info这张表,其中的字段trigger_next_time中的时间比job_cron中定义的触发时间多了8个小时,查看xxl-job-admin源码,trigger_next_time这个字段是程序中计算出来的,用关键字timezone搜索代码,意外发现Dockerfile设置了时区:

FROM openjdk:7-jre-slim

MAINTAINER xuxueli

ENV PARAMS=""

ENV TZ=PRC

RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone

ADD target/xxl-job-admin-*.jar /app.jar

ENTRYPOINT ["sh","-c","java -jar /app.jar $PARAMS"]

联想到这台机器上xxl-job就是用docker部署的,而Dockerfile是运维小伙自己手动编写,并没有timezone信息。而我在本地没有遇到这个问题,是因为我本地的xxl-job并不是运行在docker中。确定问题出在docker环境的时区信息没有设置!

解决:

运维小伙启动jar包添加了参数 -Duser.timezone=GMT+08,问题解决。

 

以上是 记一次xxljob定时任务没有触发的问题 的全部内容, 来源链接: utcz.com/z/512197.html

回到顶部