如何使用 wget 重试连接?

如何使用 wget 重试连接?

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

问题是速度经常下降并停滞不前,--, -K/s而进程仍然处于活动状态。我以为只需向该进程发送一些 KILL 信号,但当我读到在 wget 手册中有关信号这没有帮助。

当连接断开并再次建立后,如何强制wget重新初始化并从中断的地方继续下载?

我希望它保持wget运行状态,当我回来时,我希望看到它正在下载,而不是等待速度--,-K/s

答案1

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

如果你需要更进一步,你可以使用这个设置

wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0

这将重试被拒绝的连接和类似的致命的错误(--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;

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

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

答案2

--tries=number

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

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

默认重试 20 次,例外诸如“连接被拒绝”或“未找到”(404)等致命错误,不会重试。

答案3

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

相关内容