【问题标题】:Wget retrying server errors after 30 mins, not 10 secondsWget 在 30 分钟后重试服务器错误,而不是 10 秒
【发布时间】:2021-11-26 18:48:08
【问题描述】:

我每晚在 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/

try 选项确实覆盖了默认的 20 次尝试,将其限制为 5 次尝试,但 waitretry 保持在 30 分钟。有人知道为什么会这样吗?

【问题讨论】:

    标签: debian wget stretch


    【解决方案1】:

    我找到了答案,虽然它没有解释为什么 wget 似乎忽略了一些选项。

    今天早上我有另一台设备离线了。如您所见,错误与我原来的帖子(连接超时)不同,重试之间的延迟似乎是 2 分钟 + 12-13 秒。此设备的 wget 命令没有指定等待重试/超时选项:

    --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 分钟,这是一个可以接受的解决方法。

    【讨论】:

      猜你喜欢
      • 2020-10-25
      • 1970-01-01
      • 2014-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-29
      相关资源
      最近更新 更多