如何重试与wget的连接?


29

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

问题是速度经常下降并停滞不前,--, -K/s并且该过程仍然有效。我以为只是向过程发送一些KILL信号,但是正如我在wget手册中阅读有关信号的信息一样,它没有帮助。

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

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

Answers:


47

为了避免这种--, -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
默认情况下--read-timeout=900。您只需等待15分钟,wget将重新开始下载。
鲍里斯(Boris)

感谢您提供的“重试”帮助,但对我来说,它仍然不能100%正常工作,因为wget的结尾是:无法建立SSL连接。它不会重试该错误。要进行复制,请尝试获取pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak

20

--tries=number

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

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

默认设置为重试20次,致命错误(如“拒绝连接”或“未找到”(404))不会重试。


By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.