Gibt es eine WGET-Zeitüberschreitung?

83

Ich führe ein PHP-Skript über cron mit Wget mit dem folgenden Befehl aus:

wget -O - -q -t 1 http://www.example.com/cron/run

Die Verarbeitung des Skripts dauert maximal 5-6 Minuten. Wird WGet darauf warten und ihm die Zeit geben, die es braucht, oder wird es eine Auszeit geben?

Klicken Sie auf Upvote
quelle

Antworten:

145

Laut der Manpage von wget gibt es einige Optionen im Zusammenhang mit Zeitüberschreitungen - und es gibt eine Standard-Lesezeitüberschreitung von 900s - also sage ich, dass es eine Zeitüberschreitung geben könnte.


Hier sind die fraglichen Optionen:

-T seconds
--timeout=seconds

Stellen Sie das Netzwerk-Timeout auf Sekunden Sekunden ein. Dies ist äquivalent zu spezifizieren --dns-timeout, --connect-timeoutund --read-timeout, die alle zur gleichen Zeit.


Und für diese drei Optionen:

--dns-timeout=seconds

Stellen Sie das DNS-Suchzeitlimit auf Sekunden Sekunden ein.
DNS-Suchvorgänge, die nicht innerhalb der angegebenen Zeit abgeschlossen werden, schlagen fehl.
Standardmäßig gibt es keine Zeitüberschreitung bei DNS-Suchvorgängen, außer der von Systembibliotheken implementierten.

--connect-timeout=seconds

Stellen Sie das Verbindungszeitlimit auf Sekunden Sekunden ein.
TCP-Verbindungen, deren Herstellung länger dauert, werden abgebrochen.
Standardmäßig gibt es kein anderes Verbindungszeitlimit als das von Systembibliotheken implementierte.

--read-timeout=seconds

Stellen Sie das Lese- (und Schreib-) Zeitlimit auf Sekunden Sekunden ein.
Die "Zeit" dieses Zeitlimits bezieht sich auf die Leerlaufzeit: Wenn zu einem beliebigen Zeitpunkt des Downloads länger als die angegebene Anzahl von Sekunden keine Daten empfangen werden, schlägt das Lesen fehl und der Download wird neu gestartet.
Diese Option wirkt sich nicht direkt auf die Dauer des gesamten Downloads aus.


Ich nehme an, so etwas zu benutzen

wget -O - -q -t 1 --timeout=600 http://www.example.com/cron/run

sollte sicherstellen, dass es keine Zeitüberschreitung gibt, die länger als die Dauer Ihres Skripts ist.

(Ja, das ist wahrscheinlich die brutalste Lösung ^^)

Pascal MARTIN
quelle
Wenn ich -t 0 setze, wartet es dann auf unbestimmte Zeit?
Klicken Sie auf Upvote
4
Die -tOption scheint ein Alias ​​von zu sein --tries, der die Anzahl der Wiederholungsversuche auf Nummer setzt. ;;; Es scheint sich nicht auf irgendeine Art von Zeitüberschreitung zu beziehen, sondern auf die Häufigkeit, mit der wget erneut versucht, herunterzuladen, wenn ein Fehler auftritt - und Sie möchten wahrscheinlich nicht, dass eine Zeitüberschreitung als Fehler betrachtet wird Skript wird erneut aufgerufen.
Pascal MARTIN
31
- Timeout = 0 deaktiviert Timeout
MiniScalope
Ich bin wahrscheinlich derjenige auf dem Planeten, aber für Ubuntu 16 ignoriert Wget nur die Werte für --timeout. Wahrscheinlich, weil ich im Befehl die grundlegende
Authentifizierung verwende
35

Das Standardzeitlimit beträgt 900 Sekunden. Sie können ein anderes Zeitlimit angeben.

-T seconds
--timeout=seconds

Standardmäßig wird 20 Mal wiederholt. Sie können verschiedene Versuche angeben.

-t number
--tries=number

link: wget man document

hIpPy
quelle
7

Da Sie in Ihrer Frage sagten, es sei ein PHP-Skript, könnte die beste Lösung darin bestehen, einfach ein Skript hinzuzufügen:

ignore_user_abort(TRUE);

Auf diese Weise wgetwird das PHP-Skript auch nach Beendigung mindestens so lange verarbeitet, bis es das max_execution_timeLimit nicht überschreitet (INI-Direktive: Standardmäßig 30 Sekunden).

Wie auch wgetimmer, Sie sollten das Timeout nicht ändern. Laut UNIX-Handbuch beträgt das Standard-Wget-Timeout 900 Sekunden (15 Minuten) und ist viel größer als die 5-6 Minuten, die Sie benötigen.

Marco Demaio
quelle
7

Vor Version 1.14 wurden wget-Timeout-Argumente beim Herunterladen über https aufgrund eines Fehlers nicht eingehalten .

Dean Rather
quelle
Verdammt! CentOS 6 wird mit wget 1.12 ausgeliefert. Ich habe das gleiche Problem mit https-Links
Daisy
Ich habe genau den gleichen Fehler! Wget stoppte bei https Link, dessen Zertifikat abgelaufen ist!
Dylan B