“curl --retry-max-time <seconds>”如何工作?</seconds>

时间:2012-05-13 00:36:19

标签: curl

我不知道--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]在重试#1
  • 之前等待5s
  • [15-25]仍然没有速度,会重试
  • [25-30]在重试#2
  • 之前等待5s
  • [30-34]下载4s文件需要33%,而且不再有速度。
  • [34-40]等待另一个6s,仍然没有速度,超时

此时curl40s停止重试吗?

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 个答案:

答案 0 :(得分:45)

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 ...
  • 重试#3连接超时
  • 重试#5永远不会发生
  • 在END(71秒)下载失败

答案 1 :(得分:16)

让我试着澄清一下。

当curl决定重试时(因为使用--retry并且条件允许重试)并且设置了--retry-max-time,curl会检查自开始以来经过的总时间该操作已超过--retry-max-time。如果没有,则允许再次重试。

因此,在上面的命令行中:如果在考虑重试时总时间少于32秒,则会再次进行重试。如果总时间超过32秒,则不再进行重试。