Тайм-аут WGET?

85

Я запускаю PHP-скрипт через cron, используя Wget, с помощью следующей команды:

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

На обработку скрипта уйдет максимум 5-6 минут. Будет ли WGet ждать его и отдавать все необходимое время или время истечет?

Нажмите Голосовать за
источник

Ответы:

148

Согласно странице руководства 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, будет ли он ждать бесконечно?
Click Upvote
4
Параметр, -tпохоже, является псевдонимом --tries, который устанавливает количество попыток равным числу. ;;; Похоже, это не связано ни с каким тайм-аутом, но с количеством повторных попыток загрузки 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
daisy
У меня точно такая же ошибка! Wget остановился на https-ссылке, для которой истек срок действия сертификата!
Dylan B