如何实现curl请求3次重试后重启服务并添加1秒间隔
解决方案
要实现3次独立检测、每次间隔1秒,且仅当三次检测均未返回200状态码时重启服务的逻辑,可以通过循环结构修改脚本,具体代码如下:
#!/usr/bin/env bash # 配置参数,方便后续调整 API_ENDPOINT="https://myapi.com/endpoint" CHECK_TIMES=3 INTERVAL=1 # 标记是否有检测成功的情况 check_passed=false # 执行三次检测循环 for (( i=1; i<=CHECK_TIMES; i++ )); do # 发送HEAD请求并获取状态码 status_code=$(curl -X HEAD --write-out %{http_code} --silent --output /dev/null "$API_ENDPOINT") # 若本次检测返回200,标记为成功并终止循环 if [[ "$status_code" -eq 200 ]]; then check_passed=true break fi # 非最后一次检测时,等待指定间隔 if [[ $i -lt $CHECK_TIMES ]]; then sleep $INTERVAL fi done # 三次检测均未通过时,重启服务 if [[ $check_passed == false ]]; then systemctl restart myService else exit 0 fi
核心改动说明:
- 新增循环逻辑:使用
for循环控制检测次数,避免重复编写三次检测代码 - 状态标记机制:通过
check_passed变量记录是否有检测成功的情况,只要一次成功就不再继续检测 - 间隔控制:在相邻两次检测之间加入
sleep实现1秒延迟,最后一次检测后无需等待 - 参数化配置:将API地址、检测次数、间隔时间提取为变量,便于后续修改维护
内容的提问来源于stack exchange,提问作者Sixthpoint
相关产品推荐
相关产品推荐

