最近在写双机部署的shell脚本,
需要通过测试指定的url来确定项目(springboot)是否启动成功,
思路:
-
通过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状态码 -
由于系统启动需要一定的时间,因此需要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