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

记一次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,问题解决。

  • 5
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值