shell脚本测试url是否通

最近在写双机部署的shell脚本,
需要通过测试指定的url来确定项目(springboot)是否启动成功,

思路:

  1. 通过curl命令来访问指定的url
    curl -I -m 10 -o /dev/null -s -w %{http_code} http://localhost:8080/test
    curl参数说明:
    -I --head 仅返回头部信息,使用HEAD请求
    -m 10 最多查询10s
    -o /dev/null 屏蔽原有输出信息
    -s silent 模式,减少输出的信息,比如进度
    -w 控制额外输出,"%{http_code}"表示输出http状态码

  2. 由于系统启动需要一定的时间,因此需要while循环不断测试直到访问成功或者超时为止。

check-url.sh脚本如下

#!/bin/bash

#检测的url,从第一个参数中获取
url=$1
#认为检测成功的http状态码,从第二个参数中获取  
success_code=$2
#最大秒数(即超时时间)
max_seconds=180
#当前秒数
cnt_seconds=0
#休息间隔秒数
sleep_seconds=5
#结果标记
result_flag=0

if [ ! $url ]; then
  echo "第1个参数url不能为空!!!"
  echo
  exit -1
else
  echo "待检测的url="$url
  echo
fi

if [ ! $success_code ]; then
  echo "第2个参数成功状态码不能为空!!!"
  echo
  exit -1
else
  echo "检测成功的状态码success_code="${$success_code}
  echo
fi

# 通过while循环不断检测:-lt 小于,-a 逻辑与(and)  
while [ ${cnt_seconds} -lt ${max_seconds} -a ${result_flag} -eq 0 ]
do
    echo "check ${url} ..."
    # 执行curl返回http状态码 
	http_status_code=`curl -I -m 10 -o /dev/null -s -w %{http_code} ${url}`
	echo
	echo http status code = ${http_status_code}
    echo 
    # -ne表示不等于
	if [ ${http_status_code} -ne ${success_code} ]
	then
		result_flag=0
		echo ${url} 访问失败, ${sleep_seconds}秒后进行下一次尝试, cnt_seconds=${cnt_seconds}
		sleep ${sleep_seconds}
		cnt_seconds=$[${cnt_seconds}+${sleep_seconds}];
	else
		result_flag=1
		echo  ${url} 访问成功, cnt_seconds=${cnt_seconds}
	fi
	echo
	echo
done

if [ ${result_flag} -eq 0 ] 
then 
  echo ${url} 访问检测失败: ${max_seconds}秒之内未访问成功!!!
  echo
  echo
  exit -1
fi 
echo  ${url} 访问检测成功
echo 
echo

使用方式
两个参数:
参数1,待测试的url
参数2,认为成功的http状态码

./check-url.sh  localhost:8080/test  200
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值