36

不知道怎么--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)
4

2 回答 2

57
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 永远不会发生
  • END 下载失败(71 秒)
于 2012-11-25T19:09:41.460 回答
21

让我试着澄清一下。

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

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

于 2012-06-13T10:15:46.933 回答