2017-08-17 1 views
0

Hintergrund:
ich wget bin mit (Version 1.14-15.el7) auf RedHat Linux (Version 7.3 (Maipo)) in einer Bash (Version 4.2.46 (1)) Terminal.Warten Funktionalität in wget nicht wie erwartet funktioniert

Leider bin ich auf dieses spezielle RHEL-Image beschränkt, daher kann ich nicht auf eine neuere Version von wget upgraden.

Ziel:
Ich versuche, wget zu konfigurieren, so dass, wenn ein Download-Versuch fehlschlägt, geschieht Folgendes:
1) wiederholt den Download 4 weitere Male (insgesamt 5 Versuche)
2) wartet eine bestimmte Zeit (30 Sekunden) zwischen Download-Versuchen (‚Wiederholungen‘)

Für Kontext, hier ist ein relevanter Ausschnitt aus dem wget Handbuch:

-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. 

Um klar zu sein, verwende ich die --wait Flagge, NICHT die --waitretry Flagge.

Prozess:

Zuerst habe ich exportieren/set ein falsches http_proxy und https_proxy, jeder Download-Versuch, um sicherzustellen, wird eine Zeitüberschreitung.

ich den folgenden Befehl: wget --tries=5 --wait=30 <url> -O <output_filename>

An diesem Punkt die --wait Funktionalität nicht wie erwartet funktioniert. Insbesondere wartet es nicht 30 s nach jedem Download-Versuch.

Stattdessen:
1) Nach dem ersten Versuch wartet es 1s.
2) Nach dem 2. Versuch wartet es 2s.
3) Nach dem 3. Versuch wartet es 3s.
und so weiter ...

Mit anderen Worten, trotz Anwendung der --wait Flagge (die in einer festen Wartezeit zwischen Download-Versuche führen sollte), so scheint wget eine ‚lineare Backoff‘ im --waitretry wie beschrieben zu performen Flaggenabschnitt.

PROBLEM:
Ich mag die Funktionalität der --wait Flagge, NICHT die --waitretry Flagge.

Leider ist die --wait Flagge scheint, wie die --waitretry Flagge handeln zu werden - ist es eine Möglichkeit, um diese offensichtlichen Fehler in wget zu bekommen, so dass mit Hilfe der --wait Flag Ergebnisse in der erwarteten feste Wartezeit zwischen Download-Versuchen?

+0

Fragen zu allgemeiner Computerhardware und -software sind für Stack Overflow nicht relevant, es sei denn, sie beziehen sich direkt auf Tools, die hauptsächlich für die Programmierung verwendet werden. Sie können möglicherweise Hilfe auf https://superuser.com/questions/tagged/linux erhalten – tink

+0

Danke, ich werde es dort verschieben. – Seth

Antwort

0

Wie in diesen --help gesehen Dialog Sie zur Verfügung gestellt, ich glaube, Sie sollten verwenden --waitretry in Ihrem Befehl der Lage sein, sollte so etwas wie get --tries=5 --waitretry=30 <url> -O <output_filename> arbeiten!

+0

Danke, aber ich will eigentlich nicht die Funktionalität, die '--waidertry' bietet (wo wget eine lineare Backoff durchführt). Ich suche nach wget, um eine bestimmte Zeit zwischen den Download-Versuchen zu warten, die von der "--wait" -Flag bereitgestellt werden sollte, aber aus irgendeinem Grund nicht funktioniert. – Seth

+0

- "warten" wird wie ein Timeout verwendet, so dass es eine x-Sekunden-Antwort wartet, nicht als Schlaf zwischen den Versuchen. Mit --wait = 30 würde es eine Anforderung senden und bis zu 30 Sekunden warten, bevor es wegen Zeitüberschreitung fehlschlägt. –

Verwandte Themen