3

Фон:
Я использую wget (версия 1.14-15.el7) в RedHat Linux (версия 7.3 (Maipo)), в терминале Bash (версия 4.2.46 (1)).

К сожалению, я ограничен этим конкретным образом RHEL, поэтому я не могу перейти на более новую версию wget.

Цель:
Я пытаюсь настроить wget таким образом, чтобы в случае неудачной попытки загрузки он выполнял следующие действия:
1) Повторяет попытку загрузки еще 4 раза (всего 5 попыток)
2) Ожидание ФИКСИРОВАННОГО промежутка времени (30 секунд) между попытками загрузки («повторные попытки»)

Для контекста, вот соответствующий фрагмент руководства по wget:

   -w seconds
   --wait=seconds
       Wait the specified number of seconds between the retrievals.  Use of this option is
       recommended, as it lightens the server load by making the requests less frequent.
       Instead of in seconds, the time can be specified in minutes using the "m" suffix, in
       hours using "h" suffix, or in days using "d" suffix.

       Specifying a large value for this option is useful if the network or the destination
       host is down, so that Wget can wait long enough to reasonably expect the network error
       to be fixed before the retry.  The waiting interval specified by this function is
       influenced by "--random-wait", which see.

   --waitretry=seconds
       If you don't want Wget to wait between every retrieval, but only between retries of
       failed downloads, you can use this option.  Wget will use linear backoff, waiting 1
       second after the first failure on a given file, then waiting 2 seconds after the second
       failure on that file, up to the maximum number of seconds you specify.

       By default, Wget will assume a value of 10 seconds.

Чтобы было ясно, я использую флаг --wait , а не флаг --waitretry .

Процесс:

Во-первых, я экспортирую / установил неправильные http_proxy и https_proxy, чтобы гарантировать, что любая попытка загрузки истечет.

Я запускаю следующую команду:wget --tries=5 --wait=30 <url> -O <output_filename>

На данный момент функциональность --wait НЕ работает, как ожидалось. В частности, он НЕ ждет 30 секунд после каждой попытки загрузки.

Вместо:
1) После первой попытки он ждет 1с.
2) После 2-й попытки ждет 2с.
3) После 3-й попытки ждет 3с.
и так далее ...

Другими словами, несмотря на использование флага --wait (что должно приводить к фиксированному времени ожидания между попытками загрузки), wget, похоже, выполняет «линейный откат», как описано в разделе флага --waitretry .

ПРОБЛЕМА:
Мне нужна функциональность флага --wait , а НЕ флага --waitretry .

К сожалению, флаг --wait похоже, действует как флаг --waitretry - есть ли способ исправить эту очевидную ошибку в wget, чтобы использование флага --wait к ожидаемому фиксированному времени ожидания между попытками загрузки?

1 ответ1

1

Всякий раз, когда я обнаруживаю, что утилита linux не работает так, как описано в справочных страницах, я проверяю справочные страницы BSD. Они часто заполняются дополнительной ценной информацией.

Я нашел это в конце раздела --waitretry: обратите внимание, что эта опция включена по умолчанию в глобальном файле wgetrc.

Потенциально у вас есть глобальное или пользовательское значение wgetrc, определяющее waitretry.

Я не уверен на 100% в местонахождении файла в вашей версии RHEL. Возможные варианты: ~/.wgetrc /etc /wgetrc /usr /local /etc /wgetrc https://www.gnu.org/software/wget/manual/wget.html#Startup-File

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .