Wie versuche ich es erneut mit wget?

29

Ich habe eine sehr instabile Internetverbindung und muss manchmal Dateien mit einer Größe von bis zu 200 MB herunterladen.

Das Problem ist, dass die Geschwindigkeit häufig abnimmt und anhält --, -K/sund der Prozess am Leben bleibt. Ich dachte nur, um ein paar KILL-Signale an den Prozess zu senden, aber wie ich im wget-Handbuch über Signale las , hilft es nicht.

Wie kann ich wgetdie Neuinitialisierung erzwingen und den Download dort abholen, wo er nach dem Trennen der Verbindung aufgehört hat und wieder hergestellt wird?

Ich würde es gerne wgetlaufen lassen, und wenn ich zurückkomme, möchte ich sehen, wie es heruntergeladen wird, und nicht mit Geschwindigkeit warten --,-K/s.

Andrei
quelle

Antworten:

47

Um die --, -K/sSituationen zu vermeiden, die Sie verwenden können --read-timeout=seconds. Dadurch wird die Verbindung nach Ablauf der Sekunden unterbrochen.

Wenn Sie darüber hinaus gehen müssen, können Sie dieses Setup verwenden

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

Dadurch werden abgelehnte Verbindungen und ähnliche schwerwiegende Fehler --retry-connrefusedwiederholt ( --waitretry), es wird 1 Sekunde vor dem nächsten erneuten Versuch gewartet ( ), es wird maximal 20 Sekunden gewartet, falls keine Daten empfangen werden, und es wird erneut versucht ( --read-timeout), es wird maximal 15 Sekunden gewartet bevor die anfängliche Verbindung --timeoutdas Zeitlimit überschreitet ( ) und es wird schließlich unendlich oft versucht ( -t 0).

Möglicherweise möchten Sie dies auch in eine whileSchleife einfügen, um lokale Netzwerkfehler und ähnliches zu vermeiden. In diesem Fall müssen Sie auch hinzufügen --continue, um den Download an der Stelle fortzusetzen, an der Sie aufgehört haben. Das Folgende funktioniert gut 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;

Als Bonus-Tipp können Sie auch verwenden, --no-dns-cachewenn der Host Ihre Anfrage über DNS zwischen mehreren Servern ausgleicht.

Haftungsausschluss: Ich rate davon ab, dies zu verwenden, da es den Host zum Spam macht, falls die Verbindung instabil ist und es unklug ist, sie nicht überwacht zu lassen. Dies ist jedoch genau das, was Sie möchten, wenn Sie wirklich etwas herunterladen müssen und Ihre Verbindung nicht ordnungsgemäß funktioniert.

Glocke
quelle
2
standardmäßig --read-timeout=900. Sie könnten nur 15 Minuten warten und wget wird den Download neu starten.
Boris
Vielen Dank für diese "Retry" -Hilfe, aber für mich funktioniert es immer noch nicht 100%, weil wget endet mit: Konnte keine SSL-Verbindung herstellen. Dieser Fehler wird nicht wiederholt. Versuchen Sie für die Reproduktion pkg.jenkins.io/debian/jenkins.io.key
Juraj Michalak
20

--tries=number

Diese Option setzt die Anzahl der Wiederholungsversuche auf number. Geben Sie 0 oder 'inf' für einen unbegrenzten Neuversuch an.

wget --tries=70 http://example.com/myfile.zip Sollte es tun.

Standardmäßig werden 20 Versuche unternommen , mit Ausnahme schwerwiegender Fehler wie "Verbindung abgelehnt" oder "Nicht gefunden" (404), die nicht wiederholt werden.

Manu
quelle