首页/系统与基础设施/自动化运维速查/批量执行的进度跟踪方法
批量执行与作业50 条

批量执行的进度跟踪方法

进度跟踪让执行过程可观测、可中断、可续跑,核心指标是总数、成功数、失败数、跳过数与在途数,并为每个目标维护 pending/running/ok/failed/skipped 状态。状态必须持久化到文件或数据库而不是只留在内存,输出缓冲时要以状态记录为准。

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​‌​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​​‌‌​‌‌​‌​​​​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌‌​​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌‌​​​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌​​‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​

进度跟踪是什么

进度跟踪要让执行过程可观测、可中断、可续跑。基本要素是总数、已完成数(必须区分成功与失败)、在途数,再细到每个目标的状态取值与时间戳。实现的关键是把状态持久化到文件或数据库,而不是只留在内存中,这样进程中断或主机重启后还能续跑;同时注意输出的缓冲问题——日志看起来停在某一步,任务实际可能仍在运行,此时应以状态记录为准判断进度。

基本信息

核心指标总数、成功数、失败数、跳过数、在途数、剩余时间预估
细粒度状态pending、running、ok、failed、skipped、canceled
持久化方式状态文件或数据库,支持断点续跑
观测通道进度文件、结构化事件流、暴露为监控指标

典型使用场景

  • 大批量执行需要判断是在推进还是已经卡住
  • 中断后需要知道从哪些目标继续执行
  • 需要向干系人提供可核对、可复现的进度
  • 依据历史耗时数据预估剩余时间与窗口占用
  • 需要区分失败与尚未执行,避免续跑时重复操作

状态记录与续跑

状态记录与续跑
# 进度持久化:先写 running,再写终态,中断后状态不丢
printf '%s\t%s\n' "$h" running >> progress.tsv
if ssh -n "$h" 'true'; then
  printf '%s\t%s\n' "$h" ok >> progress.tsv
else
  printf '%s\t%s\n' "$h" failed >> progress.tsv
fi
# 续跑:只挑未成功的目标
awk -F'\t' '$2=="ok"{print $1}' progress.tsv | sort -u > done.txt
comm -23 <(sort hosts) done.txt > todo.txt
printf 'done=%s todo=%s\n' "$(wc -l < done.txt)" "$(wc -l < todo.txt)"

进度指标与异常判读

指标含义异常表现
总数本次作业的目标数量与预检数量不一致说明目标选择有问题
成功数已确认完成的数量长时间不增长说明已经在卡住
失败数明确失败的数量快速上升需要立即中止并止损
在途数正在执行的数量长期保持高位说明任务没有正常退出
跳过数因条件不满足未执行大量跳过说明判定条件过严
输出的缓冲会让日志看起来停在某一步,但任务实际仍在执行。进度判断应以状态记录为准,同时尽量使用行缓冲或非缓冲输出,减少误判带来的不必要干预。
只在内存中维护进度,进程中断或主机重启后进度全部丢失,只能从头重跑;对带副作用的操作,这意味着已变更的目标会被重复操作,影响可能比原故障更大。

易错点

  • 只在内存中维护进度,中断后只能从头重跑并重复操作已成功目标
  • 进度只统计完成数不区分成功与失败,续跑时把失败目标当成已完成
  • 输出缓冲导致日志长时间无更新,被误判为任务卡死而人为重启
  • 进度数据缺少时间戳,无法判断作业是真的在跑还是早已停滞

数据来源与参考

  • Ansible 官方文档:回调插件与执行统计
  • GNU Parallel 手册页:--joblog 记录每项作业状态
  • Bash 参考手册:jobs 与 wait -n 的作业状态查询

整理校对:其其网ICT文档中心 · 本页地址:docs.qiqicto.com/automation/batch-execution-progress-tracking.html

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌​​‌​‌‌‌‌​‌‌​​​​‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌‌‌‌​‌‌​‌‌​‌​‌‌​​​​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌‌‌​‌‌​​​‌​​‌‌​​​​‌​‌‌‌​‌​​​‌‌​​​‌‌​‌‌​‌​​​​​‌​‌‌​‌​‌‌​​‌​‌​‌‌‌‌​​​​‌‌​​‌​‌​‌‌​​​‌‌​‌‌‌​‌​‌​‌‌‌​‌​​​‌‌​‌​​‌​‌‌​‌‌‌‌​‌‌​‌‌‌​​​‌​‌‌​‌​‌‌‌​​​​​‌‌‌​​‌​​‌‌​‌‌‌‌​‌‌​​‌‌‌​‌‌‌​​‌​​‌‌​​‌​‌​‌‌‌​​‌‌​‌‌‌​​‌‌​​‌​‌‌​‌​‌‌‌​‌​​​‌‌‌​​‌​​‌‌​​​​‌​‌‌​​​‌‌​‌‌​‌​‌‌​‌‌​‌​​‌​‌‌​‌‌‌​​‌‌​​‌‌‌​​‌​‌‌‌​​‌‌​‌​​​​‌‌‌​‌​​​‌‌​‌‌​‌​‌‌​‌‌​​