Подтвердить что ты не робот

Как работает "curl -retry-max-time <seconds>"?

Я не знаю, как рассчитывается --retry-max-time. Если я загружу файл file.txt:

curl --max-time 10 --retry 3 --retry-delay 5 --retry-max-time 32 'http://www.site.com/download/file.txt'

  • [ 0- 2] Требуется 2s для загрузки 50% файла и без какой-либо скорости.
  • [ 2-10] Он ждет еще одного 8s, все еще не будет скорости, таймаута, повторит попытку
  • [10-15] Ожидается 5s перед повторением # 1
  • [15-25] По-прежнему нет скорости, повторите попытку
  • [25-30] Ожидает 5s перед повторной попыткой # 2
  • [30-34] Для загрузки 33% файла требуется 4s и больше нет скорости.
  • [34-40] Он ждет еще одного 6s, все еще нет скорости, таймаута

Будет ли curl остановить повторение в этой точке (40s)?

Когда был запущен и остановлен retry timer?


   --retry-max-time <seconds>
          The  retry  timer  is reset before the first transfer attempt. Retries will be done as usual (see --retry) as
          long as the timer hasn't reached this given limit. Notice that if the timer hasn't  reached  the  limit,  the
          request  will be made and while performing, it may take longer than this given time period. To limit a single
          request´s maximum time, use -m, --max-time.  Set this option to  zero  to  not  timeout  retries.  (Added  in
          7.12.3)
4b9b3361

Ответ 1

Позвольте мне пояснить.

Когда curl решает выполнить повтор (поскольку используется --retry, и условия таковы, что требуется повторение), и был установлен --retry-max-time, завиток проверяет, прошло ли общее время, прошедшее с начала операции превзошел --retry-max-time или нет. Если это не так, это позволит повторить попытку.

Итак, в вашей командной строке выше: если общее время меньше 32 секунд к моменту, когда он считает повторную попытку, он выполнит повторную попытку. Если общее время больше 32 секунд, он больше не будет делать повторных попыток.

Ответ 2

curl --connect-timeout 5 \
     --max-time 10 \
     --retry 5 \
     --retry-delay 0 \
     --retry-max-time 60 \
     'http://www.site.com/download/file.txt'

|<---0---->| {<---1---->|  |<---2---->|    |<---3---->|   |<---4---->|   }            |<---5---->|
|....==    | {...==     |  |....==    |    |.....|        |..=== =   |   }
             {                                                           }

NOTATION

=====  downloading...       (file size is 5)
.....  --connect-timeout 5
|<->|  --max-time 10
<-5->  --retry 5
>| |<  --retry-delay 0      ([default] exp backoff algo)
{   }  --retry-max-time 60  (GAME OVER)

Примечание

  • Задержка повтора 1, 2, 4, 8...
  • retry # 3 timeout
  • Повторить # 5 никогда не бывает
  • загрузка завершилась с ошибкой в ​​END (71 сек)