Como tentar novamente as conexões com o wget?

29

Eu tenho uma conexão à Internet muito instável e às vezes tenho que baixar arquivos de até 200 MB.

O problema é que a velocidade freqüentemente cai e fica parada, --, -K/se o processo permanece vivo. Eu pensei apenas em enviar alguns sinais KILL para o processo, mas, enquanto eu lia no manual do wget sobre sinais , isso não ajuda.

Como posso forçar wgeta reinicializar a si próprio e pegar o download de onde parou depois que a conexão cai e volta a funcionar?

Gostaria de sair wgetcorrendo e, quando voltar, quero vê-lo sendo baixado e não esperando com velocidade --,-K/s.

Andrei
fonte

Respostas:

47

Para evitar as --, -K/ssituações que você pode usar --read-timeout=seconds. Isso excederá o tempo limite da conexão após a quantidade de segundos.

Se você precisar ir além, pode usar esta configuração

wget --retry-connrefused --waitretry=1 --read-timeout=20 --timeout=15 -t 0

Isso tentará novamente conexões recusadas e erros fatais semelhantes ( --retry-connrefused), aguardará 1 segundo antes da próxima tentativa ( --waitretry), aguardará no máximo 20 segundos caso nenhum dado seja recebido e tente novamente ( --read-timeout), aguardará no máximo 15 segundos antes que a conexão inicial atinja o tempo limite ( --timeout) e, por fim, tente novamente um número infinito de vezes ( -t 0).

Você também pode colocar isso em um whileloop para evitar falhas na rede local e similares. Nesse caso, você também precisará adicionar --continuepara continuar o download de onde parou. O seguinte funciona bem no 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;

Como uma dica de bônus, você também pode usar se --no-dns-cacheo host equilibrar sua solicitação entre vários servidores pelo DNS.

Isenção de responsabilidade: eu não recomendo usá-lo, pois ele enviará spam ao host, caso a conexão seja instável e seja imprudente deixá-lo sem monitoramento. No entanto, é isso que você deseja, caso realmente precise fazer o download de algo e sua conexão não funcione adequadamente.

Sino
fonte
2
por padrão --read-timeout=900. Você pode esperar 15 minutos e o wget reiniciará o download.
Boris
Obrigado por esta ajuda de "nova tentativa", mas para mim ainda não funciona 100%, porque o wget termina com: Não é possível estabelecer a conexão SSL. Ele não tenta novamente esse erro. Para reproduzir, tente wget pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak
20

--tries=number

Esta opção define o número de tentativas para número. Especifique 0 ou 'inf' para repetição infinita.

wget --tries=70 http://example.com/myfile.zip deve fazê-lo.

O padrão é tentar novamente 20 vezes, com exceção de erros fatais como "conexão recusada" ou "não encontrada" (404), que não são tentadas novamente.

Manu
fonte