我运行了一个脚本来部署2个Web服务和一个前端应用程序。该脚本调用一种方法,该方法检查2个后端服务是否已启动并正在运行。如果是这样,请认为部署成功,否则还原。
这两项服务的启动时间有时比前端长。目前我进入睡眠呼叫以延迟Web服务检查。这使他们有时间启动。
我想删除此睡眠并添加重试机制,以便在服务停止时重复检查,直到我收到回复。
检查设备是否已启动,我使用curl。我已经读过curl有一个重试机制,但我从来没有使用它。
你们之前有没有解决过这个问题?我想了解解决问题时必须考虑的事项,例如:在我从我的服务中获得HTTP 200之前,我会重试吗?
有人建议我如何测试这个吗?我需要找一个失败的服务。
编辑:我看到-retry只对瞬态错误做出反应'瞬态错误意味着:超时,FTP 4xx响应代码或HTTP 5xx响应代码'。我的服务可以返回404,因此curl的重试不是我的解决方案。
答案 0 :(得分:20)
以下语句将重试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-connrefuse
。
答案 1 :(得分:2)
如果您使用--max-time 10
,它将在10秒之前终止您的连接,因此在下载时无用。
以下操作将重试300次,延迟为5秒,连接超时为30秒
curl \
--connect-timeout 30 \
--retry 300 \
--retry-delay 5 \
URL
答案 2 :(得分:1)
只是为任何新人清除任何可能的混淆......
请参阅:https://curl.haxx.se/docs/manpage.html
- 重试
如果curl尝试执行a时返回瞬态错误 转移,它会在放弃之前重试这么多次。设置 数字为0使curl不重试(这是默认值)。 瞬态错误意味着:超时,FTP 4xx响应代码或 HTTP 5xx响应代码。
当curl即将重试转移时,它将首先等待一秒钟 然后对于所有即将进行的重试,它将使等待时间加倍 直到它达到10分钟,然后将是之间的延迟 其余的重试。 使用--retry-delay禁用此功能 指数退避算法。 另请参阅--retry-max-time来限制 允许重试的总时间。
如果多次使用此选项,将使用最后一个选项。
在7.12.3中添加。