背景:
我在 RedHat Linux(版本 7.3(Maipo))上的 Bash(版本 4.2.46(1))终端中使用 wget(版本 1.14-15.el7)。
不幸的是,我仅限于这个特定的 RHEL 映像,所以我无法升级到较新版本的 wget。
目标:
我正在尝试配置 wget,以便如果下载尝试失败,它会执行以下操作:
1)再重试下载 4 次(总共 5 次尝试)
2)在两次下载尝试之间等待固定的时间(30 秒)('重试')
为了说明上下文,下面是 wget 手册的相关片段:
-w seconds
--wait=seconds
Wait the specified number of seconds between the retrievals. Use of this option is
recommended, as it lightens the server load by making the requests less frequent.
Instead of in seconds, the time can be specified in minutes using the "m" suffix, in
hours using "h" suffix, or in days using "d" suffix.
Specifying a large value for this option is useful if the network or the destination
host is down, so that Wget can wait long enough to reasonably expect the network error
to be fixed before the retry. The waiting interval specified by this function is
influenced by "--random-wait", which see.
--waitretry=seconds
If you don't want Wget to wait between every retrieval, but only between retries of
failed downloads, you can use this option. Wget will use linear backoff, waiting 1
second after the first failure on a given file, then waiting 2 seconds after the second
failure on that file, up to the maximum number of seconds you specify.
By default, Wget will assume a value of 10 seconds.
要明确的是,我使用的是--wait
flag,而不是--waitretry
flag。
过程:
首先,我导出/设置了错误的 http_proxy 和 https_proxy,以确保任何下载尝试都会超时。
我运行以下命令:
wget --tries=5 --wait=30 <url> -O <output_filename>
此时,该--wait
功能无法按预期工作。具体来说,它不会在每次下载尝试后等待 30 秒。
而是:
1) 第一次尝试后,等待 1 秒。2
) 第二次尝试后,等待 2 秒。3
) 第三次尝试后,等待 3 秒。
依此类推...
换句话说,尽管使用了该--wait
标志(这应该会导致下载尝试之间的固定等待时间),但 wget 似乎正在执行--waitretry
标志部分中描述的“线性退避”。
问题:
我想要的是旗帜的功能--wait
,而不是--waitretry
旗帜本身。
不幸的是,该--wait
标志似乎像标志一样起作用--waitretry
- 有没有什么方法可以修复 wget 中这个明显的错误,以便使用该--wait
标志导致下载尝试之间出现预期的固定等待时间?
答案1
每当我发现 Linux 实用程序没有按照手册页中描述的那样工作时,我都会查看 BSD 手册页。它们通常包含更多有价值的信息。
我在 --waitretry 部分的末尾发现了这一点:请注意,此选项在全局 wgetrc 文件中默认启用。
您可能有一个全局或用户 wgetrc 值来定义 waitretry。
我不能 100% 确定你的 RHEL 版本上该文件的位置。可能的选项:~/.wgetrc /etc/wgetrc /usr/local/etc/wgetrc https://www.gnu.org/software/wget/manual/wget.html#Startup-File