结论先给:中断后的已覆盖范围,不能靠扫描进度条或“已完成百分比”判断,而要用“可核对的落盘证据”反推——即已写入结果集的URL集合、时间戳和批次边界。如果这些证据不完整,默认把整次扫描视为未完成,重新跑的成本通常低于基于残缺数据做决策的风险。下面给出区分不同情况的证据、一个会让结论失效的反例,以及中断后最该做的下一步动作。
同样是扫描停下来,落盘状态不一样,覆盖范围的可信度也不一样。可以用下面的特征做区分:
判断动作很具体:打开结果文件,检查最后若干行是否结构完整(字段数一致、无截断),再与进度记录中的批次编号比对。如果最后一批不完整,就把该批整批丢弃,而不是只删掉坏行——因为同一批里可能还有你没发现的静默丢失。
不要依赖工具界面上的“已扫描X条”。可靠的做法是自己构造三个可核对的量:
把这三个量对齐后,你能得到一个保守的已覆盖集合。假设一次扫描计划覆盖1万个URL,结果文件去重后有6200条,批次编号连续到第62批(每批100条),时间戳最晚值距中断约几分钟——在假设批次写入是原子性的前提下,可以认为前6200条左右是可信覆盖,剩余部分需要重扫。注意这是假设,不是实测结论,实际是否原子写入要看你所用工具或脚本的落盘方式。
上面的推理有一个关键前提:结果文件里的记录顺序与扫描顺序一致,且每条记录只写一次。如果工具采用并发写入或多进程分片,这个前提就不成立。此时“去重后6200条”可能来自扫描顺序的后半段,而前半段因为分片失败根本没写入;批次编号也可能各分片独立编号,最大连续值没有全局意义。
识别这种反例的信号是:结果文件中的URL分布与你的站点结构明显不符,比如只覆盖了某个目录,或时间戳在同一秒内大量聚集。一旦出现这类信号,前面基于“连续批次”的估算全部作废,只能把整次扫描当作未完成处理。这也是为什么“请求量归零”或“进度停在某处”不能单独证明中断点就是覆盖边界——并发、重试、缓存命中都可能造成类似现象,需要结合写入证据一起看。
先做一次小规模续扫验证,再决定是续跑还是全量重跑。具体动作:从疑似未覆盖的区间中抽取一小批URL(例如按站点目录或ID区间取若干条),单独跑一次扫描并记录落盘结果。如果这批URL能被正常写入且结构完整,说明工具和落盘链路没问题,可以按批次边界续跑剩余部分;如果这批也出现写入异常,说明问题不在中断本身,而在写入环节,此时续跑只会重复产生不可信数据,应当先修复落盘逻辑再全量重跑。
这个动作的结果直接决定下一步:续跑成功,你只需补齐缺失区间并再次核对去重计数;续跑失败,整次扫描的数据都不应进入后续分析。无论哪种情况,最终用于决策的覆盖范围都应以“去重后唯一URL数”为准,而不是任何进度百分比。