您当前的位置: 首页 > 

qq_34412985

暂无认证

  • 0浏览

    0关注

    1061博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

记一次xxl-job配置的cron表达式没有触发定时任务

qq_34412985 发布时间:2021-11-13 16:22:46 ,浏览量:0

记一次xxl-job定时任务没有触发的问题,公司选用的是最简单的xxl-job的remote http bean模式,cron表达式写错了,0 0/5 * * * ? 表达式后面有空格,将表达式修改正确后必须将任务停止后再重新启动否则任务不会生效。至于下面的时区我暂时没有遇到,因为之前的定时任务都可以正常使用。

 

当初选了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,问题解决。

关注
打赏
1653291990
查看更多评论
立即登录/注册

微信扫码登录

0.0644s