如何重试与 wget 的连接?

And*_*rei 41 linux wget

我的互联网连接非常不稳定,有时必须下载大至 200 MB 的文件。

问题是速度经常下降并--, -K/s保持不变,而该过程仍然有效。我想只是向进程发送一些 KILL 信号,但是当我在 wget 手册中阅读有关信号的内容时,它无济于事。

如何强制wget重新初始化自身并在连接断开后从停止的地方继续下载并再次恢复?

我想离开wget跑步,当我回来时,我想看到它下载,而不是等待速度--,-K/s

Bel*_*ell 68

为了避免这种--, -K/s情况,您可以使用--read-timeout=seconds. 这将在几秒钟后超时连接。

如果您需要超出此范围,您可以使用此设置

wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0
Run Code Online (Sandbox Code Playgroud)

这将重试被拒绝的连接和类似的致命错误 ( --retry-connrefused),在下一次重试之前将等待 1 秒 ( --waitretry),如果没有收到数据,它将等待最多 20 秒,然后再试一次 ( --read-timeout),它将等待最多 15 秒在初始连接超时 ( --timeout) 之前,最终它将重试无限次 ( -t 0)。

您可能还想将其置于while循环中以避免本地网络故障等。在这种情况下,您还需要添加--continue以便从您停止的地方继续下载。以下在 Bash 中运行良好

while [ 1 ]; do
    wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0 --continue
    if [ $? = 0 ]; then break; fi; # check return value, break if successful (0)
    sleep 1s;
done;
Run Code Online (Sandbox Code Playgroud)

作为额外提示,您还可以--no-dns-cache在主机通过 DNS 在多个服务器之间平衡您的请求时使用。

免责声明:我不建议使用它,因为它会在连接不稳定的情况下向主机发送垃圾邮件,并且不对其进行监控是不明智的。但是,如果您确实需要下载某些内容并且您的连接无法正常工作,这就是您想要的。

  • 默认情况下`--read-timeout=900`。您只需等待 15 分钟,wget 就会重新开始下载。 (3认同)
  • 还有一个“--retry-on-http-error=code”选项。就我而言,服务器时不时地返回错误 500,因此我需要添加 `--retry-on-http-error=500` 才能使其正常工作。 (3认同)

小智 28

--tries=number

此选项将重试次数设置为 number。为无限重试指定 0 或 'inf'。

wget --tries=70 http://example.com/myfile.zip 应该这样做。

默认是重试 20 次,除了“连接被拒绝”或“未找到”(404)等致命错误,它们不会重试。


Ben*_*ebe 3

这有帮助吗?在askubuntu.com上,我发现了一个与您所问的问题非常相似的问题。这是它的链接:https://askubuntu.com/questions/72663/how-to-make-wget-retry-download-if-speed-goes-below-certain-threshold