Come riprovare le connessioni con wget?


29

Ho una connessione Internet molto instabile e talvolta devo scaricare file di dimensioni fino a 200 MB.

Il problema è che la velocità spesso diminuisce e si attesta --, -K/se il processo rimane vivo. Ho pensato solo di inviare alcuni segnali KILL al processo, ma come ho letto nel manuale di wget sui segnali non aiuta.

Come posso forzare wgeta reinizializzare se stesso e riprendere il download da dove era stato interrotto dopo che la connessione si interrompe e ritorna di nuovo?

Vorrei lasciare wgetcorrere e quando torno, voglio vederlo scaricare e non aspettare con velocità --,-K/s.

Risposte:


47

Al fine di evitare le --, -K/ssituazioni che è possibile utilizzare --read-timeout=seconds. Ciò determinerà il timeout della connessione dopo la quantità di secondi.

Se è necessario andare oltre, è possibile utilizzare questa configurazione

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

Ciò riproverà le connessioni rifiutate e simili errori fatali ( --retry-connrefused), attenderà 1 secondo prima del prossimo tentativo ( --waitretry), attenderà un massimo di 20 secondi nel caso in cui non vengano ricevuti dati e quindi riproverà ( ), --read-timeoutattenderà al massimo 15 secondi prima del timeout della connessione iniziale ( --timeout) e infine riproverà un numero infinito di volte ( -t 0).

Potresti anche metterlo in un whileciclo per evitare guasti alla rete locale e simili. In questo caso, è necessario aggiungere anche --continueper continuare il download da dove era stato interrotto. Quanto segue funziona bene in 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;

Come suggerimento bonus puoi anche utilizzare --no-dns-cachenel caso in cui l'host bilanci la tua richiesta tra più server tramite DNS.

Dichiarazione di non responsabilità: sconsiglio di utilizzare questa opzione poiché invierà spam all'host nel caso in cui la connessione sia instabile ed è poco saggio lasciarla non monitorata. Tuttavia, questo è ciò che desideri nel caso in cui tu abbia davvero bisogno di scaricare qualcosa e la tua connessione non funzioni adeguatamente.


2
per impostazione predefinita --read-timeout=900. Potresti aspettare solo 15 minuti e wget riavvierà il download.
Boris,

Grazie per l'aiuto "riprova", ma per me non funziona ancora al 100%, perché wget termina con: Impossibile stabilire una connessione SSL. Non riprova su quell'errore. Per la riproduzione prova a wget pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak

20

--tries=number

Questa opzione imposta il numero di tentativi su numero. Specificare 0 o 'inf' per tentativi infiniti.

wget --tries=70 http://example.com/myfile.zip dovrebbe farlo.

L'impostazione predefinita è riprovare 20 volte, ad eccezione di errori fatali come "connessione rifiutata" o "non trovata" (404), che non vengono ritentati.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.