文档故障排查

定时任务未执行的排查

该跑的报表没生成、该同步的数据没同步。本文按触发、调度、执行、结果四个环节排查定时任务问题。

李工2026-08-22阅读 113有用 19

现象

定时任务该执行时没执行,或者执行了但结果不对。

四环节排查

定时任务的链路:触发 → 调度 → 执行 → 结果

按顺序查,定位到哪个环节断了。

环节一:触发

任务是怎么被触发的?

触发方式 检查点
系统内置调度 调度服务是否运行
操作系统 crontab cron 服务是否运行、配置是否正确
外部调度平台 平台是否正常、任务是否启用

常见问题

  • 调度服务被停掉了(比如服务器重启后没自启)
  • crontab 配置的时间格式写错
  • 任务被手动禁用了

环节二:调度

触发到了,但任务没有被正确分派。

检查点

  • 任务是否到了执行时间(时区问题?)
  • 是否有重复任务互相干扰
  • 集群环境下是否所有节点都尝试执行(导致重复或冲突)

集群环境下的常见问题:多个节点同时执行同一个任务,导致数据重复;或者任务被分派到了没有权限的节点。

解决:加分布式锁,保证同一时刻只有一个节点执行。

环节三:执行

任务开始执行了,但失败了。

检查点

  • 任务日志(有没有异常堆栈)
  • 依赖的服务是否可用(数据库、外部接口)
  • 数据是否满足执行条件
  • 执行时间是否超过了超时限制

常见失败原因

原因 表现
数据库连接失败 连接超时
依赖接口不可用 调用失败
数据为空 空指针异常
超时被杀 任务中断,无结束日志
内存不足 OOM 被杀

环节四:结果

任务执行成功了,但结果不对。

检查点

  • 任务的输入数据是否正确
  • 业务逻辑是否符合预期
  • 结果是否被覆盖(重复执行导致)
  • 结果是否写到了正确的目标

常见问题:任务执行了两次(比如调度配置重复),第二次覆盖了第一次的结果,或者数据翻倍。

排查步骤

  1. 确认任务是否被触发:查任务的执行日志,看有没有执行记录
  2. 看最后一次成功的时间:从什么时候开始不正常的
  3. 对比变化:这个时间点前后有什么变更(发版、配置修改、数据量激增)
  4. 手动执行:手工触发一次,看是否成功。成功说明是调度问题,失败说明是执行问题
  5. 看依赖:任务依赖的服务和接口是否正常

"手动执行一次"是最有效的定位手段,能快速区分调度问题和执行问题。

常见根因

根因一:服务器重启后任务没恢复

如果任务依赖的调度服务没有配置开机自启,服务器重启后就没了。

解决:配置自启 + 加任务存活监控。

根因二:任务执行时间撞车

两个耗时任务安排在同一时刻,互相抢占资源,都超时。

解决:错开任务时间,或改为串行依赖。

根因三:数据量增长导致超时

任务原本 10 分钟跑完,数据量翻了 10 倍后需要 2 小时,超过了超时限制被杀。

解决

  • 分批处理
  • 优化查询
  • 调大超时(治标)

根因四:静默失败

任务执行报错,但没有告警,也没人看日志,就一直"静静地"失败着。

解决必须有失败告警。任务失败时通过短信、邮件、企业微信通知责任人。

这是最值得做的一项改进。没有告警,任务失败了也没人知道。

根因五:时区问题

服务器时区是 UTC,业务期望的是本地时间,导致任务在错误的时间执行。

解决:统一时区,并在配置里显式声明。

监控建议

定时任务必须监控:

监控项 说明
是否按时执行 超过预定时间 N 分钟未执行则告警
执行是否成功 失败立即告警
执行时长 超过历史平均值 2 倍则预警
处理数据量 突然为 0 或异常大时告警

"处理数据量为 0 也告警"这一条很重要:任务成功执行但一条数据都没处理,通常意味着上游数据有问题。

任务清单管理

建议维护一份任务清单,包含:

任务名 频率 时间 责任人 失败影响
日报生成 每日 06:00 张三 车间看不到日报
ERP 同步 每 30 分钟 全天 李四 工单不及时
数据备份 每日 02:00 运维 数据风险
数据归档 每月 1 日 03:00 运维 数据库膨胀

有了这份清单,交接和排查都会方便很多。

定时任务的配置与告警设置,[待补充:百华智造 MES 任务调度配置说明]。

这篇内容对你有帮助吗?

当前为游客态,投票按设备去重