首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Curl重试机制

Curl重试机制
EN

Stack Overflow用户
提问于 2017-03-18 18:41:29
回答 3查看 68.5K关注 0票数 62

我运行了一个脚本来部署2个web服务和一个前端应用程序。脚本调用一个方法,该方法检查两个后端服务是否已启动并正在运行。如果是,则认为部署成功,否则恢复。

这两个服务有时需要比前端更长的时间来启动。目前,我设置了一个休眠调用来延迟web服务检查。这使它们有时间启动。

我想删除此休眠,并添加重试机制,以便如果服务关闭,只需重复尝试检查,直到我得到响应。

Tp检查设备是否启动,我使用curl。我读到curl有一个重试机制,但我从来没有用过它。

你们中有谁以前解决过这个问题吗?我想要了解在解决它时必须考虑的事情,例如,我是否要重试,直到从我的服务中获得HTTP 200?

有没有什么建议我该怎么测试呢?我需要找一个停机的服务。

编辑:我发现-retry只对暂时性错误做出反应。暂时性错误意味着:超时、FTP4xx响应码或HTTP5xx响应码。我的服务可以返回404,因此curl的重试不是我的解决方案。

EN

回答 3

Stack Overflow用户

发布于 2017-03-18 18:50:24

以下语句将重试5次或最多40秒,连接超时时间为5秒,并且没有指数退避策略

代码语言:javascript
复制
curl --connect-timeout 5 \
    --max-time 10 \
    --retry 5 \
    --retry-delay 0 \
    --retry-max-time 40 \
    'http://your_url'


--max-time 10     (how long each retry will wait)
--retry 5         (it will retry 5 times)
--retry-delay 0   (an exponential backoff algorithm)
--retry-max-time  (total time before it's considered failed)

请注意,还有一个即使连接被拒绝也会重试的--retry-connrefused (从curl 7.52.0开始)和--retry-all-errors (从curl 7.71.0开始),它“是重试的重锤”。

票数 113
EN

Stack Overflow用户

发布于 2018-04-14 05:18:53

只是为了给新来的人澄清任何可能的困惑...

请参阅:https://curl.haxx.se/docs/manpage.html

--重试

如果curl尝试传输时返回暂时性错误,它会重试该次数,然后放弃。将该数字设置为0会使curl不进行重试(这是默认设置)。瞬时错误意味着:超时、FTP 4xx响应码或HTTP 5xx响应码。

当curl将要重试传输时,它将首先等待一秒钟,然后对于所有即将到来的重试,它将加倍等待时间,直到它达到10分钟,然后这将是其余重试之间的延迟。通过使用---可禁用此指数回退算法。另请参阅---max- time以限制允许重试的总时间。

如果多次使用此选项,则将使用最后一个选项。

在7.12.3中添加。

票数 12
EN

Stack Overflow用户

发布于 2019-09-02 21:14:33

如果你使用--max-time 10,这将在10秒内切断你的连接,所以在下载时没有用。

下面将重试300次,延迟5秒,连接超时30秒

代码语言:javascript
复制
curl \
    --connect-timeout 30 \
    --retry 300 \
    --retry-delay 5 \
    URL
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42873285

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档