记一次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-slimMAINTAINER 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