网站推广自动化工具:一次全站扫描被中断后怎样判断已覆盖范围

📍 WDQWDWQD987AAAAA:216.73.217.128
📱 Mozilla/5.0 AppleWebKit/537.36 (KHTML, like Gecko; compatible; ClaudeBot/1.0; +claudebot@anthropic.com)
🔗 /93aa8d5c56f6.html
📄

网站推广自动化工具:一次全站扫描被中断后怎样判断已覆盖范围

先看中断发生在哪一层:如果扫描器按“发现队列”逐条处理,并且每处理完一条就把状态写入可持久化的记录,那么中断后能依据队列与完成标记复原覆盖范围;如果扫描器只在内存里维护进度、日志也只写“开始/结束”,中断后基本无法精确复原,只能重新扫描或按分段重跑。判断的关键不是看跑了多久,而是看有没有可核对的“已完成单元”记录。

条件一:有持久化进度记录时,用完成标记复原覆盖

这类工具通常会把待抓取地址放入队列,处理完成后更新状态字段。中断后先不要重启全量任务,而是导出三份数据做比对:

把这三份数据按URL去重后相加,与扫描开始前的总清单对比,差集就是未覆盖部分。实际动作是:先冻结当前状态快照,再只对“待处理”和“处理中”的条目续跑,而不是重跑全站。这样做的结果是,续跑量通常远小于全量,且已完成条目的结果不会被覆盖或重复计数。下一步可以据此决定是否需要补一轮抽样验证。

需要注意一个边界:完成标记只代表“该单元被处理过”,不代表结果有效。如果中断发生在结果写入之前,状态可能已标记完成但数据为空。因此续跑前应抽查若干已完成条目,确认其输出字段非空,再决定是否信任这批完成标记。

条件二:只有日志没有状态记录时,用时间窗口与序号推算

如果工具只输出连续日志,没有可查询的状态表,判断覆盖范围就要依赖日志中的序号或时间戳。可区分的原因有两类:

  1. 日志按递增序号打印,中断点即最大序号,覆盖范围约等于该序号之前的条目;
  2. 日志只打印时间,没有序号,则只能按时间窗口估算,误差较大。

此时的实际动作是:取最后一条完整日志的时间戳,回推一个安全间隔,把这之前的条目视为可能已覆盖,之后的全部重跑。结果是覆盖范围偏保守,可能重复处理一部分,但不会漏掉。下一步应把日志补上序号字段,避免下次仍然只能估算。

这里有一个常见误判:看到请求量突然归零,就认为扫描已经跑完。请求量归零还可能是因为被目标站点限流、网络中断或队列耗尽,三者含义完全不同。仅凭归零不能证明覆盖完整,必须结合队列状态或日志序号判断。

两种条件下如何选择续跑还是重跑

选择依据可以简化为一条:能否列出“未完成单元”的明确清单。能列出,就续跑;列不出,就重跑或分段重跑。假设某次扫描共一万个地址,中断时已完成标记有六千条,待处理三千条,处理中一千条——这组数字只是说明比较方法,实际数量需以工具导出为准。此时续跑量为四千条,明显小于全量。若没有任何状态记录,只能全量重跑,代价是时间与请求额度。

分段重跑是折中方案:按目录、子域或时间片把全站切成若干段,逐段扫描并记录每段完成情况。这样即使再次中断,损失也只限于当前段。实施时先切段、再逐段记录完成标记,结果是中断影响范围可控,下一步可以把段粒度调细以进一步降低重跑成本。

续跑前必须确认的例外情况

个别样本成立不代表规模化后仍然成立。以下几种例外会让“已完成”标记失真:

对应的动作是:续跑前先抽样比对中断前后的输出字段是否一致,若结构或字段发生变化,应把中断前后的结果分开存放,不要直接合并统计。这一步的结果决定后续分析能否把两批数据当作同一口径使用。

把覆盖判断固化为可重复的流程

与其每次中断后临时推断,不如在任务开始前就要求工具输出可核对的进度单元。具体做法是:为每个待处理地址分配唯一标识,处理完成后写入带时间戳的状态记录,并定期导出快照。这样中断后只需对比快照与总清单,即可得到未覆盖清单。该动作的结果是覆盖判断从“估算”变为“核对”,下一步的续跑范围和验证抽样都能直接依据清单确定。若所用工具不支持导出状态记录,应把这一项列为选型或配置时的核对点,具体能力以实际版本为准。

图1 图2

nginx