A funcionalidade de espera do Wget não está funcionando como esperado

3

Contexto:
Estou usando o wget (versão 1.14-15.el7) no RedHat Linux (versão 7.3 (Maipo)), em um terminal Bash (versão 4.2.46 (1)).

Infelizmente, estou limitado a esta imagem RHEL específica, por isso não posso atualizar para uma versão mais recente do wget.

Meta:
Eu estou tentando configurar o wget para que, se uma tentativa de download falhar, ele faça o seguinte: 1) Repete o download mais 4 vezes (total de 5 tentativas)
2) Aguarda um tempo fixo (30 segundos) entre tentativas de download ('tentativas')

Para o contexto, aqui está um trecho relevante do manual do 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.

Para deixar claro, estou usando o sinalizador --wait , NÃO o sinalizador --waitretry .

Processo:

Primeiro, eu exporto / defino um http_proxy e um https_proxy errados, para garantir que qualquer tentativa de download expire.

Eu corro o seguinte comando: wget --tries=5 --wait=30 <url> -O <output_filename>

Neste ponto, a funcionalidade --wait NÃO funciona conforme o esperado. Especificamente, ele não espera 30s após cada tentativa de download.

Em vez disso:
1) Após a primeira tentativa, aguarda 1s.
2) Após a segunda tentativa, espera 2s.
3) Após a 3ª tentativa, espera 3s.
e assim por diante ...

Em outras palavras, apesar de usar o --wait flag (que deve resultar em um tempo de espera fixo entre tentativas de download), o wget parece estar executando um 'backoff linear' conforme descrito na seção --waitretry flag.

PROBLEMA:
Eu quero a funcionalidade do sinalizador --wait , NÃO o sinalizador --waitretry .

Infelizmente, o sinalizador --wait parece estar agindo como o sinal --waitretry - existe alguma maneira de corrigir esse bug aparente no wget, de modo que usar o sinalizador --wait resulte no tempo de espera fixo esperado entre tentativas de download?

    
por Seth 18.08.2017 / 02:25

1 resposta

1

Sempre que eu acho que um utilitário Linux não está funcionando como descrito nas páginas man, eu verifico as páginas de manual do BSD. Eles geralmente são preenchidos com informações valiosas adicionais.

Encontrei isso no final da seção --waitretry: Note que esta opção está ativada por padrão no wgetrc global        arquivo.

Potencialmente, você tem um valor de wgetrc global ou de usuário que define waitretry.

Não tenho 100% de certeza da localização do arquivo na sua versão RHEL. Possíveis opções: ~ / .wgetrc / etc / wgetrc / usr / local / etc / wgetrc link

    
por 20.09.2017 / 16:30