Hybris 20.05部署后cronjob触发器无法自动触发任务问题咨询
Hybris 20.05 新服务器部署后Cronjob无法自动触发故障排查方向
已知手动触发Cronjob可正常执行、同代码在其他服务器运行正常,可完全排除代码、业务逻辑问题,故障根源集中在新服务器的环境配置、调度组件运行状态层面,按排查优先级排序的常见诱因如下:
- 调度节点角色配置错误
Hybris定时任务自动触发依赖承担调度职责的节点轮询触发器表,新服务器部署时配置偏差是最高发的原因:- 核对
local.properties配置项,确认cluster.node.groups是否包含cronjob、taskengine、scheduler这类调度必需的节点组,若当前节点未被分配调度角色,不会执行任何定时触发逻辑 - 检查是否存在误配置的全局开关:
cronjob.trigger.disabled=true、task.engine.enabled=false两个参数只要被设为true,会直接关闭所有Cronjob的自动触发能力,且完全不影响手动触发功能 - 集群部署场景下需确认,是否所有节点都被配置为非调度节点,导致集群中无节点承担触发器轮询职责
- 核对
- 系统时间/时区配置不匹配
自动触发逻辑以系统时间、配置时区为基准计算触发时机,时间偏差会直接导致触发判定失效:- 执行
date命令核对服务器硬件时间、系统时间是否和实际标准时间偏差过大,若时间差超过触发间隔的数倍,会出现所有任务都判定为未到触发时间的情况 - 核对服务器系统时区、Hybris配置的
cronjob.timezone参数、数据库会话时区三者是否一致,时区偏差超过8小时以上时,大概率会出现定时任务完全不自动触发的问题
- 执行
- 任务调度线程初始化失败/挂死
- 登录HAC控制台进入「监控-任务」页面,查看Task Engine运行状态是否为正常运行,若启动阶段JVM资源不足、数据库连接初始化失败,会导致调度轮询线程直接挂死,无法扫描待触发的Cronjob
- 检索服务启动日志中
TriggerTask、TaskEngine相关的报错,这类轮询线程的初始化报错不会影响手动触发逻辑——手动触发是直接向任务表插入执行记录,不依赖触发器轮询线程
- 触发器下次激活时间异常
- 直接查询数据库
cronjobtrigger表,核对所有触发器记录的nextactivationtime字段值是否正常:若部署时执行的系统更新操作异常,可能导致所有触发器的下次激活时间被置空、或被设置为远晚于当前的时间点,调度线程扫描不到可触发的任务 - 检查
cronjob.trigger.calculate.next.time.on.startup配置是否被误设为false,该配置关闭后,服务启动时不会重新计算所有触发器的下次执行时间,会沿用部署前存储的错误时间值导致不触发
- 直接查询数据库
- 集群通信异常
集群部署场景下,若新服务器的防火墙、安全组规则拦截了Hybris集群节点间的通信端口(默认范围9999及以上),会导致集群调度选主失败,没有主节点承担定时调度职责,也会出现全量Cronjob自动触发失效、手动触发正常的现象。
内容的提问来源于stack exchange,提问作者Rabia
相关产品推荐
相关产品推荐

