Wget 在 30 分钟后重试服务器错误,而不是 10 秒
Wget retrying server errors after 30 mins, not 10 seconds
我是 运行 Debian Stretch 服务器上的一个简单 bash 脚本,每晚通过 VPN 备份不同站点的多个工业设备。随着这些设备的老化,它们似乎会出现一个问题,即它们将通过 FTP 连接但拒绝提供目录列表。这会导致 wget 生成非致命错误。
我希望 wget 遵循 --waitretry 的选项来处理这个错误(来自手册页):
--waitretry=秒数
如果您不希望 Wget 在每次检索之间等待,而只是在重试失败下载之间等待,您可以使用此选项。 Wget 将使用线性退避,在给定文件第一次失败后等待 1 秒,然后在该文件第二次失败后等待 2 秒,直到您指定的最大秒数。默认情况下,Wget 将采用 10 秒的值。
但是,它没有等待默认的 10 秒,而是在两次重试之间等待 30 分钟。它还默认重试 20 次,将备份延迟数小时。我搜索了手册页、wget 在线文档、本地 /etc/wgetrc,找不到与 30 分钟或 1800 秒相关的选项。
这里有两次连续的尝试显示了 30 分钟的延迟和响应:
--2021-11-26 03:08:52-- ftp://user:*password*@192.168.18.4/SD1/
(try: 2) => ‘192.168.18.4/SD1/.listing’
Connecting to 192.168.18.4:21... connected.
Logging in as user ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /SD1 ... done.
==> PORT ... done. ==> LIST ...
Error in server response, closing control connection.
Retrying.
--2021-11-26 03:38:55-- ftp://user:*password*@192.168.18.4/SD1/
(try: 3) => ‘192.168.18.4/SD1/.listing’
Connecting to 192.168.18.4:21... connected.
Logging in as user ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /SD1 ... done.
==> PORT ... done. ==> LIST ...
Error in server response, closing control connection.
Retrying.
我在命令行中添加了 --tries=5 和 --waitretry=30 选项以尝试覆盖 30 分钟的延迟:
wget --waitretry=30 -t 5 -m --no-passive -o ftplog ftp://user:password@192.168.18.4/SD1/
尝试选项确实覆盖了默认的 20 次尝试,将其限制为 5 次尝试,但 waitretry 保持在 30 分钟。有人知道为什么会这样吗?
我找到了答案,虽然它没有解释为什么 wget 似乎忽略了一些选项。
今天早上我有另一台设备掉线了。如您所见,错误与我原来的 post(连接超时)不同,重试之间的延迟似乎是两分钟 + 12-13 秒。此设备的 wget 命令未指定 waitretry / 超时选项:
--2021-12-06 02:49:23-- ftp://user:*password*@192.168.40.3/SD1/
=> ‘192.168.40.3/SD1/.listing’
Connecting to 192.168.40.3:21... failed: Connection timed out.
Retrying.
--2021-12-06 02:51:35-- ftp://user:*password*@192.168.40.3/SD1/
(try: 2) => ‘192.168.40.3/SD1/.listing’
Connecting to 192.168.40.3:21... failed: Connection timed out.
Retrying.
由于 --waitretry 没有效果,我将此选项更改为 --read-timeout 对于服务器响应无效的设备:
wget --read-timeout=60 -t 5 -m --no-passive -o ftplog ftp://user:password@192.168.18.4/SD1/
现在,重试回到 2 分钟(不是指定的 60 秒)加上 wget 文档中为 --waitretry 指定的线性退避。这没有回答我最初的问题,但它可以防止每次重试花费 30 分钟,这是一个可以接受的解决方法。
我是 运行 Debian Stretch 服务器上的一个简单 bash 脚本,每晚通过 VPN 备份不同站点的多个工业设备。随着这些设备的老化,它们似乎会出现一个问题,即它们将通过 FTP 连接但拒绝提供目录列表。这会导致 wget 生成非致命错误。
我希望 wget 遵循 --waitretry 的选项来处理这个错误(来自手册页):
--waitretry=秒数
如果您不希望 Wget 在每次检索之间等待,而只是在重试失败下载之间等待,您可以使用此选项。 Wget 将使用线性退避,在给定文件第一次失败后等待 1 秒,然后在该文件第二次失败后等待 2 秒,直到您指定的最大秒数。默认情况下,Wget 将采用 10 秒的值。
但是,它没有等待默认的 10 秒,而是在两次重试之间等待 30 分钟。它还默认重试 20 次,将备份延迟数小时。我搜索了手册页、wget 在线文档、本地 /etc/wgetrc,找不到与 30 分钟或 1800 秒相关的选项。
这里有两次连续的尝试显示了 30 分钟的延迟和响应:
--2021-11-26 03:08:52-- ftp://user:*password*@192.168.18.4/SD1/
(try: 2) => ‘192.168.18.4/SD1/.listing’
Connecting to 192.168.18.4:21... connected.
Logging in as user ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /SD1 ... done.
==> PORT ... done. ==> LIST ...
Error in server response, closing control connection.
Retrying.
--2021-11-26 03:38:55-- ftp://user:*password*@192.168.18.4/SD1/
(try: 3) => ‘192.168.18.4/SD1/.listing’
Connecting to 192.168.18.4:21... connected.
Logging in as user ... Logged in!
==> SYST ... done. ==> PWD ... done.
==> TYPE I ... done. ==> CWD (1) /SD1 ... done.
==> PORT ... done. ==> LIST ...
Error in server response, closing control connection.
Retrying.
我在命令行中添加了 --tries=5 和 --waitretry=30 选项以尝试覆盖 30 分钟的延迟:
wget --waitretry=30 -t 5 -m --no-passive -o ftplog ftp://user:password@192.168.18.4/SD1/
尝试选项确实覆盖了默认的 20 次尝试,将其限制为 5 次尝试,但 waitretry 保持在 30 分钟。有人知道为什么会这样吗?
我找到了答案,虽然它没有解释为什么 wget 似乎忽略了一些选项。
今天早上我有另一台设备掉线了。如您所见,错误与我原来的 post(连接超时)不同,重试之间的延迟似乎是两分钟 + 12-13 秒。此设备的 wget 命令未指定 waitretry / 超时选项:
--2021-12-06 02:49:23-- ftp://user:*password*@192.168.40.3/SD1/
=> ‘192.168.40.3/SD1/.listing’
Connecting to 192.168.40.3:21... failed: Connection timed out.
Retrying.
--2021-12-06 02:51:35-- ftp://user:*password*@192.168.40.3/SD1/
(try: 2) => ‘192.168.40.3/SD1/.listing’
Connecting to 192.168.40.3:21... failed: Connection timed out.
Retrying.
由于 --waitretry 没有效果,我将此选项更改为 --read-timeout 对于服务器响应无效的设备:
wget --read-timeout=60 -t 5 -m --no-passive -o ftplog ftp://user:password@192.168.18.4/SD1/
现在,重试回到 2 分钟(不是指定的 60 秒)加上 wget 文档中为 --waitretry 指定的线性退避。这没有回答我最初的问题,但它可以防止每次重试花费 30 分钟,这是一个可以接受的解决方法。