无人值守任务不能只看进程有没有退出:程序可能仍在运行,却卡在等待、重复处理或持续产出错误结果。有效的无人值守移动业务任务的运行状态巡检机制,要把执行过程、业务产出和故障恢复放在一起检查,并为异常保留可核对的记录。
适用对象可以是移动端触发的后台同步、定时计算、文件处理或消息消费任务。无论任务运行在设备、服务器还是托管平台,巡检都应回答四个问题:任务是否按时启动、是否持续推进、结果是否符合预期、异常是否及时暴露。
先定义“正常”,再决定检查什么
每个任务至少记录任务标识、计划触发时间、开始与结束时间、当前阶段、处理数量、结果状态和最近一次成功时间。进程存活只能说明程序还在;若任务长时间没有新的进度记录,仍应视为可能停滞。涉及用户数据时,还要确认结果写入是否完成,而不是只记录“执行成功”。
把状态分为待执行、运行中、成功、失败和超时,定义清楚转换条件。例如,任务开始后有阶段性进度,且最终结果通过校验,才算成功;超过该任务允许时长仍未结束,则记为超时。运行时长差异较大时,应按任务类型分别设限,不能给所有任务套用同一个超时值。
按执行、进度、结果三层巡检
执行层:任务有没有按计划启动
核对调度记录与实际启动记录是否对应,查看进程、容器或工作进程的存活状态,以及启动失败、退出码和资源不足等信息。若使用 HTTP 健康检查,应区分“服务可响应”和“任务执行正常”:前者不能代替对具体任务的检查。
进度层:运行中是否仍在推进
对耗时任务记录阶段、已处理数量和最后更新时间。可采用心跳检测:任务运行期间定期报告仍在工作,但心跳必须结合进度判断。固定间隔多久发送,取决于任务时长、网络条件与检查成本;短任务可在关键阶段记录,长任务则可按分钟级或更长间隔更新,并为短暂网络中断留出容错时间。
结果层:完成是否等于成功
检查输出记录、文件是否可读取、关键字段是否齐全、处理数量是否合理。对于数据库写入任务,可核对本次批次的完成标记和记录数;对于文件任务,可检查文件存在、大小非零及格式能否解析。若业务允许结果延迟到达,应区分“尚未完成”和“已失败”,不要仅因暂时没有新结果就报警。
可落地的巡检步骤
- 登记任务契约。写明触发方式、预期完成时间范围、输入输出、成功判据、重试上限和负责人。
- 建立状态记录。每次运行生成唯一运行编号,将开始、阶段进度、结束状态及错误原因关联起来;敏感内容不写入普通日志。
- 设置定时检查。对照计划触发时间检查是否漏跑;对运行中的任务核对最近进度时间,对结束任务校验结果。
- 区分可恢复故障。网络超时等暂时性错误可采用幂等重试,避免重复提交造成重复结果;数据格式错误等确定性问题通常应停止重试并转人工处理。
- 分级通知并复核。连续失败、超时或关键结果缺失可触发告警;告警应附任务编号、发生时间、错误摘要和最近成功时间。恢复后记录恢复原因,确认重跑不会重复执行副作用。
频率、阈值和告警怎么定
检查频率要与任务节奏匹配。每几分钟触发一次的任务,可以按分钟级检查漏跑与完成情况;每日任务可在预定时间之后留出合理缓冲,再判断超时。对于长时间运行的批处理,重点看进度是否更新,而非频繁重启或轮询。阈值应根据历史运行时长、业务时限和资源情况逐步调整,初期可先记录观察,再设置告警,避免把正常波动变成噪声。
告警至少区分单次失败、连续失败、持续无进度和结果校验失败。普通任务可先通知值班人员;影响关键业务的任务则应提升级别,并提供可执行的排查入口。不要只按失败次数告警:如果任务每天只运行一次,连续失败一次就可能已经错过业务时限。
常见问题
进程还活着,为什么任务仍然算异常?
进程存活不代表工作推进。结合最近心跳、阶段变化和结果记录判断;长时间无进度且超过预设时限,应标记为疑似卡住。
失败后要不要自动重试?
先判断错误是否暂时性,以及操作能否安全重复。具备幂等保障的网络或服务暂时故障可以有限重试;数据错误、权限错误等应优先告警并停止自动重试。
移动设备离线时怎么巡检?
把“设备暂不可达”和“任务已失败”分开记录。设备恢复连接后核对任务是否补执行、结果是否重复,并按业务要求设置过期时间或补偿规则。
归根结底,无人值守移动业务任务的运行状态巡检机制不是增加一条存活探测,而是形成从计划触发、执行进度到结果验证和故障恢复的闭环。先确定每项任务的成功条件,再用记录、阈值和分级告警持续验证,才能让无人值守真正可观察、可排查、可恢复。