Чи відповідає час очікування WGET?


83

Я запускаю PHP-скрипт через cron за допомогою Wget, з наступною командою:

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

Для обробки сценарію знадобиться максимум 5-6 хвилин. WGet дочекається його і надасть йому весь час, який йому потрібен, або закінчиться?

Відповіді:


145

Згідно з інформаційною сторінкою wget , існує кілька варіантів, пов’язаних з тайм-аутами - і за замовчуванням існує тайм-аут для читання за 900 секунд - тому я кажу, що так, це може таймаут.


Ось варіанти, про які йдеться:

-T seconds
--timeout=seconds

Встановіть час очікування мережі на секунди секунд. Це еквівалентно завданням --dns-timeout, --connect-timeoutі --read-timeout, все в той же самий час.


І для цих трьох варіантів:

--dns-timeout=seconds

Встановіть час очікування для пошуку DNS на секунди секунд.
Пошук DNS, який не завершиться протягом зазначеного часу, не вдасться.
За замовчуванням у пошуку DNS немає часу очікування, крім того, який реалізований системними бібліотеками.

--connect-timeout=seconds

Встановіть час очікування підключення на секунди секунд.
TCP-з’єднання, для встановлення яких потрібно більше часу, буде припинено.
За замовчуванням немає часу очікування підключення, крім того, який реалізований системними бібліотеками.

--read-timeout=seconds

Встановіть час очікування (і запису) на секунди секунд.
"Час" цього тайм-ауту відноситься до простою: якщо в будь-який момент завантаження дані не надходять більше зазначеної кількості секунд, читання не вдається і завантаження перезапускається.
Цей параметр безпосередньо не впливає на тривалість всього завантаження.


Я припускаю, використовуючи щось на зразок

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

слід переконатися, що немає часу очікування раніше, ніж тривалість вашого сценарію.

(Так, це, мабуть, найжорстокіше можливе рішення ^^)


якщо я встановлю -t 0, це буде чекати нескінченно довго?
Натисніть "Проголосувати"

4
-tВаріант , як видається, є псевдонімом --tries, який Set число повторних спроб. ;;; Здається, це не пов’язано з будь-яким часом очікування, але з тим, скільки разів wget повторно спробує завантажити, якщо є помилка - і ви, мабуть, не хочете, щоб час очікування розглядався як помилка, скрипт перевикликується.
Паскаль МАРТІН

32
--timeout = 0 вимкне тайм-аут
MiniScalope

я, мабуть, один на планеті, але для ubuntu 16 wget просто ігнорує значення для --timeout. Можливо тому, що я використовую базову автентифікацію в команді
Кирило Офіцеров

35

Типовий час очікування - 900 секунд. Ви можете вказати різний тайм-аут.

-T seconds
--timeout=seconds

За замовчуванням повторити спробу 20 разів. Ви можете вказати різні спроби.

-t number
--tries=number

посилання: документ wget man


7

Оскільки у своєму питанні ви сказали, що це PHP-скрипт, можливо найкращим рішенням може бути просто додати у свій скрипт:

ignore_user_abort(TRUE);

Таким чином, навіть якщо wgetтермін дії завершується, PHP-скрипт продовжує оброблятися принаймні до тих пір, поки він не перевищить max_execution_timeобмеження (директива ini: 30 секунд за замовчуванням).

Як і в wgetбудь-який час, вам не слід змінювати час очікування, згідно з керівництвом UNIX, тайм-аут wget за замовчуванням становить 900 секунд (15 хвилин) , що набагато більше, ніж вам потрібно 5-6 хвилин.


7

До версії 1.14 аргументи тайм-ауту wget не дотримувались при завантаженні через https через помилку .


Блін! CentOS 6 поставляється з wget 1.12, у мене така ж проблема з посиланнями https
Дейзі

У мене точно така ж помилка! Wget зупинився на посиланні https, термін дії якого минув.
Ділан Б,
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.