卷曲重试机制

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

这两个服务有时需要比前端更长的时间才能启动。目前,我加入了一个睡眠呼叫来延迟 Web 服务检查。这使他们有时间启动。

我想删除这个睡眠,并添加一个重试机制,这样,如果服务关闭,只需重试检查,直到我得到一个响应。

为了检查设备是否启动,我使用 卷发。我读到过 curl 有一个重试机制,但我从未使用过。

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

有没有人对我如何测试这个有什么建议? 我需要找到一个关闭的服务。

编辑: 我看到 -retry只对瞬态错误作出反应。“瞬态错误意味着超时、 FTP 4xx 响应代码或 HTTP 5xx 响应代码”。我的服务可以返回一个404,因此卷曲的重试不是我的解决方案。

94161 次浏览

以下语句将重试5次或最多40秒,连接超时5秒,且没有截断二进制指数避退算法策略

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以来)“是重试的大锤”。

只是为了给新来的人解释一下可能的疑惑。

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

重试

如果 curl 尝试执行 转移,它会在放弃之前重试这个次数 如果数字为0,则 curl 不会重试(这是默认值)。 瞬态错误意味着超时、 FTP 4xx 响应代码或 一个 HTTP5xx 响应代码。

当 curl 将要重试传输时,它将首先等待一秒钟 然后对于所有即将到来的重试,它将加倍等待时间 直到它达到10分钟,然后将是延迟之间的 其余的重试。 < strong > < em > 通过使用—— retry-late 禁用此选项 截断二进制指数避退算法算法。 另见—— retry-max-time 来限制 允许重试的总时间。

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

在7.12.3中添加。

如果您使用 --max-time 10,这将会在10秒之前中断您的连接,因此在下载时没有用处。

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

curl \
--connect-timeout 30 \
--retry 300 \
--retry-delay 5 \
URL