Как работает "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)
Ответы
Ответ 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 сек)