Czy limit czasu WGET?

85

Uruchamiam skrypt PHP przez cron przy użyciu Wget, z następującym poleceniem:

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

Skrypt może przetworzyć maksymalnie 5-6 minut. Czy WGet zaczeka na to i da mu tyle czasu, ile potrzebuje, czy też minie limit czasu?

Kliknij opcję Głos za głosem
źródło

Odpowiedzi:

148

Zgodnie ze stroną podręcznika wget , istnieje kilka opcji związanych z przekroczeniem limitu czasu - a domyślny limit czasu odczytu wynosi 900 sekund - więc mówię, że tak, może upłynąć limit czasu.


Oto opcje, o których mowa:

-T seconds
--timeout=seconds

Ustaw limit czasu sieci na sekundy sekundy. Jest to równoważne określeniu --dns-timeout, --connect-timeouti --read-timeout, w tym samym czasie.


A dla tych trzech opcji:

--dns-timeout=seconds

Ustaw limit czasu wyszukiwania DNS na sekundy sekundy.
Wyszukiwania DNS, które nie zostaną zakończone w określonym czasie, zakończą się niepowodzeniem.
Domyślnie nie ma limitu czasu wyszukiwania DNS, innego niż ten zaimplementowany przez biblioteki systemowe.

--connect-timeout=seconds

Ustaw limit czasu połączenia na sekundy sekundy.
Połączenia TCP, których ustanowienie zajmie więcej czasu, zostaną przerwane.
Domyślnie nie ma limitu czasu połączenia, innego niż ten zaimplementowany przez biblioteki systemowe.

--read-timeout=seconds

Ustaw limit czasu odczytu (i zapisu) na sekundy sekundy.
„Czas” tego limitu czasu odnosi się do czasu bezczynności: jeśli w dowolnym momencie pobierania żadne dane nie zostaną odebrane przez więcej niż określoną liczbę sekund, odczyt kończy się niepowodzeniem i pobieranie jest wznawiane.
Ta opcja nie wpływa bezpośrednio na czas trwania całego pobierania.


Przypuszczam, że używając czegoś takiego

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

powinien upewnić się, że nie ma limitu czasu dłuższego niż czas trwania skryptu.

(Tak, to prawdopodobnie najbardziej brutalne rozwiązanie z możliwych ^^)

Pascal MARTIN
źródło
jeśli ustawię -t 0, czy będzie czekał w nieskończoność?
Kliknij przycisk „Za głosowaniem”
4
-tOpcja wydaje się być aliasem --tries, który Ustaw liczbę prób na liczbę. ;;; Wydaje się, że nie ma to związku z jakimkolwiek przekroczeniem limitu czasu, ale z tym, ile razy wget spróbuje ponownie pobrać, jeśli wystąpi błąd - i prawdopodobnie nie chcesz, aby limit czasu był traktowany jako błąd, a skrypt jest ponownie wywoływany.
Pascal MARTIN
32
--timeout = 0 wyłączy limit czasu
MiniScalope
Jestem prawdopodobnie tym na tej planecie, ale w przypadku Ubuntu 16 wget po prostu ignoruje wartości dla --timeout. Prawdopodobnie dlatego, że używam podstawowego uwierzytelniania w poleceniu
Kirill Oficerov
35

Domyślny limit czasu to 900 sekund. Możesz określić inny limit czasu.

-T seconds
--timeout=seconds

Domyślnie ponowna próba to 20 razy. Możesz określić różne próby.

-t number
--tries=number

link: dokument wget man

hIpPy
źródło
7

Ponieważ w swoim pytaniu powiedziałeś, że to skrypt PHP, może najlepszym rozwiązaniem byłoby po prostu dodanie skryptu:

ignore_user_abort(TRUE);

W ten sposób, nawet jeśli się wgetzakończy, skrypt PHP jest przetwarzany przynajmniej do momentu, gdy nie przekroczymax_execution_time limitu (dyrektywa ini: domyślnie 30 sekund).

W każdym wgetrazie nie powinieneś zmieniać jego limitu czasu, zgodnie z instrukcją UNIX domyślny limit czasu wget wynosi 900 sekund (15 minut) , czyli jest znacznie większy niż potrzeba 5-6 minut.

Marco Demaio
źródło
7

Przed wersją 1.14 argumenty limitu czasu wget nie były przestrzegane podczas pobierania przez https z powodu błędu .

Dean Rather
źródło
Cholera! CentOS 6 jest dostarczany z wget 1.12, mam ten sam problem z linkami https
daisy
Mam dokładnie ten sam błąd! Wget zatrzymał się na łączu https, którego ważność wygasła!
Dylan B