Wget:超时后等待吗?

Wget:超时后等待吗?

我看到这个选项:

--waitretry=seconds

如果您不希望 Wget 在每次检索之间等待,而只希望在失败的下载重试之间等待,则可以使用此选项。Wget 将使用线性退避,在给定文件第一次失败后等待 1 秒,然后在该文件第二次失败后等待 2 秒,直到达到您指定的最大秒数。因此,值 10 实际上将使 Wget 等待每个文件最多 (1 + 2 + ... + 10) = 55 秒。

默认情况下,Wget 将假设该值为 10 秒。

但它没有(a)它似乎没有增加重试之间的时间,并且(b)我不想设置等待的“最大”时间,而是设置最短时间。

--timeout=seconds

将网络超时设置为秒数。这相当于同时指定--dns-timeout--connect-timeout和 。--read-timeout

与网络交互时,Wget 可以检查超时情况,如果操作耗时过长,则中止操作。这可以防止挂起读取和无限连接等异常情况。默认情况下启用的唯一超时是 900 秒的读取超时。将超时设置为 0 会完全禁用它。除非您知道自己在做什么,否则最好不要更改默认超时设置。

所有超时相关选项都接受十进制值以及亚秒值。例如,0.1秒是合法的(尽管不明智)超时选择。亚秒超时对于检查服务器响应时间或测试网络延迟很有用。

这似乎设定了放弃之前的时间。

那么我该如何说“如果连接超时,请等待 10 分钟再重试”?

答案1

您可以禁用重试(-t 0)并检查 wget 返回值。例如在使用 bash 时:

failures=0
while [ $failures -lt 10 ]; do
 wget -t 0 http://www.example.com/asdf
 if [ "$?" = 0 ]; then
  break
 else
  let failures=failures+1
  sleep 600
 fi
done

如果 wget 失败,这将检查 wget 的返回值并休眠 600 秒。如果文件已成功下载(并保存),wget 将返回 0。这个小脚本只运行十次 - 当然,您可以在 while 循环中更改参数。否则,例如脚本将无限期地尝试下载相同的文件,即使它不存在。使用不同的 shell 运行需要进行一些小的更改(例如,您不能使用“let”,但通常 expr 是很好的替代品)。

相关内容