it-swarm.com.de

Hat WGET eine Zeitüberschreitung?

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

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

Das Skript benötigt für die Verarbeitung maximal 5-6 Minuten. Wird WGet darauf warten und ihm die Zeit geben, die er benötigt, oder wird es eine Auszeit nehmen?

72
Click Upvote

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 entspricht der Angabe von --dns-timeout, --connect-timeout, und --read-timeout, alles zur selben Zeit.


Und für diese drei Optionen:

--dns-timeout=seconds

Stellen Sie das Zeitlimit für die DNS-Suche auf Sekunden Sekunden ein.
DNS-Suchvorgänge, die nicht innerhalb der angegebenen Zeit abgeschlossen werden, schlagen fehl.
Standardmäßig tritt bei DNS-Suchvorgängen keine Zeitüberschreitung auf, außer der, die von Systembibliotheken implementiert wird.

--connect-timeout=seconds

Stellen Sie das Verbindungs-Timeout auf Sekunden Sekunden ein.
TCP-Verbindungen, deren Aufbau länger dauert, werden abgebrochen.
Standardmäßig gibt es kein Verbindungszeitlimit, außer dem, das von Systembibliotheken implementiert wird.

--read-timeout=seconds

Stellen Sie das Zeitlimit für Lesen (und Schreiben) auf Sekunden Sekunden ein.
Die "Zeit" dieses Timeouts bezieht sich auf die Leerlaufzeit: Wenn zu einem beliebigen Zeitpunkt des Downloads mehr als die angegebene Anzahl von Sekunden lang keine Daten empfangen wurden, 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, etwas wie

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

stellen Sie sicher, dass keine Zeitüberschreitung länger als die Dauer Ihres Skripts ist.

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

131
Pascal MARTIN

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

-T seconds
--timeout=seconds

Standardmäßig werden 20 Versuche unternommen. Sie können verschiedene Versuche angeben.

-t number
--tries=number

link: wget man document

30
hIpPy

Da Sie in Ihrer Frage angegeben haben, dass es sich um ein PHP) - Skript handelt, ist es möglicherweise die beste Lösung, einfach Folgendes in Ihr Skript einzufügen:

ignore_user_abort(TRUE);

Auf diese Weise wird das Skript PHP) auch dann weiter verarbeitet, wenn wget beendet wird, bis es das max_execution_time - Limit nicht überschreitet (ini-Direktive: 30 Sekunden by Standard).

Nach wget sollten Sie das Zeitlimit nicht ändern. gemäß UNIX-Handbuch Das Standardzeitlimit für Wgets beträgt 900 Sekunden (15 Minuten) , das ist viel größer als die 5-6 Minuten, die Sie brauchen.

6
Marco Demaio

Vor Version 1.14 wurden wget-Timeout-Argumente nicht eingehalten, wenn aufgrund eines Fehlers über https heruntergeladen wurde.

5
Dean Rather