Как работает "curl-retry-max-time"?
Я не знаю, как --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]требуется4sдля загрузки33%файла, и нет скорости больше нет.
[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)
2 ответов:
Позвольте мне попытаться прояснить ситуацию.
Когда curl решает сделать повторную попытку (поскольку используется
--retryи условия были таковы, что повторная попытка гарантирована) и был установлен--retry-max-time, curl проверяет, превысило ли общее время, прошедшее с начала операции,--retry-max-timeили нет. Если это не так, то он позволит еще одну попытку.Итак, в командной строке выше: если общее время меньше 32 секунд к тому времени, когда он рассматривает повторную попытку, он сделает еще одну попытку. Если общее время больше 32 секунд он больше не будет делать никаких попыток.
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---->| |....== | {...== | |....== | |.....| |..=== = | } { }Нотация
===== 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 ...
- повтор #3 тайм-аут соединения
- повторная попытка #5 никогда не произойдет
- ошибка загрузки в конце (71 сек)
Comments