结论先说:如果扫描被中断且没有完整日志,你只能判断“哪些范围有可核对的痕迹”,不能判断“全站已经覆盖”。可核对痕迹包括已落盘的URL清单、带时间戳的结果文件、任务队列里已标记完成的分片,以及扫描过程中导出的中间结果。缺少这些痕迹时,中断前的覆盖范围无法还原,只能重跑或补扫。
扫描中断不是一种情况,判断依据也不同。第一种是进程崩溃或强制关闭,通常只剩最后一次成功写盘的结果;第二种是任务队列仍在但执行线程停止,队列里“已完成”的条目可信,“进行中”的条目不可信;第三种是网络或权限中断,部分请求可能已经发出但结果没有回收,这部分既不算完成,也不能直接算未覆盖。
一个可操作的区分方法是看输出文件是否按分片写入。如果工具按批次落盘,每个批次带有起始序号或时间戳,那么最后一个完整批次之前的内容基本可信。如果所有结果只在内存里汇总、结束时才统一导出,中断后通常什么也拿不到。这个差异决定了你是“补扫剩余部分”还是“整站重跑”。
在缺少完整数据或后台权限的情况下,仍可执行的最小动作是:找到最近一次成功写出的结果文件,统计其中出现的URL数量,并与你事先准备的URL清单做差集。这个动作不需要工具的高级功能,只需要两份可读的文本。
这个动作的结果会直接影响下一步:如果“无结果”集中在少数目录,说明中断点可能落在某个分片边界,补扫这些目录即可;如果“无结果”散布在全站且没有明显边界,说明中断发生得较早,补扫的遗漏风险高,整站重跑更稳妥。
有几个常见误判需要避开。结果文件行数很大,不等于覆盖全站,因为同一URL可能重复出现,或者清单本身就不完整。扫描耗时接近预期,也不等于完成,因为中断可能发生在最后阶段。请求量归零同样不能证明处理正确,它可能只是任务已经停止、网络断开或权限失效。
一个反例足以让“已覆盖”的结论失效:假设你按目录分片扫描,前三个目录的结果文件完整,第四个目录只写入了前半部分,而工具在汇总时把不完整分片也计入了总数。此时总数看起来接近全站,但第四个目录的后半部分实际没有结果。只要存在一个分片边界不明确,就不能把总数当作覆盖证据。
选择补扫的条件是:分片边界清晰、已落盘结果带有可识别的序号或时间戳、无结果部分集中在可枚举的范围内。选择重跑的条件是:结果只在内存中汇总、分片边界无法确认、种子清单本身不完整,或者中断原因可能影响已落盘数据的正确性。
补扫时不要只补“无结果”的URL,还要把中断点前后各一个分片纳入重扫范围,用来验证边界是否可靠。重跑时优先缩小范围,例如先按目录或URL数量分批执行,每批结束后立即落盘,而不是等全站结束再导出。这样即使再次中断,你仍然知道上一批的边界在哪里。
为了让下一次中断后能快速判断,扫描前应固定三样东西:一份去重后的URL清单、一个按批次落盘的输出目录、一份记录批次与时间戳的进度文件。进度文件不需要复杂格式,纯文本即可,例如每完成一批追加一行 batch=004 end=1200 time=...。这样中断后,你只需要看最后一行完整记录,就能确定补扫起点。
需要提醒的是,具体工具是否支持分批落盘、进度文件写在哪个位置、中断后能否续跑,取决于该工具的当前实现,使用前需要自行核对。不同版本之间也可能存在差异,不能把一次观察到的行为当作长期稳定的功能。