监控你的站点访问是否正常

描述

今日练习题

 【需求】

写一个监控脚本,监控某站点访问是否正常。

提示:

1)可以将访问的站点以参数的形式提供,例如 

sh xxx.sh www.aminglinux.com
 2)状态码为2xx或者3xx表示正常

3)正常时echo正常,不正常时echo不正常

【分析】

1)脚本是带有参数的,第一个参数就是要访问的站点URL,传递的第一个参数,在脚本里用$1表示;

2)获取站点状态码,使用curl工具。其中curl的-I参数只获取header信息,里面就包含状态码。例如:

 

curl -I 'www.aminglinux.com'
HTTP/1.1 301 Moved Permanently
Server: nginx
Date: Fri, 02 Dec 2022 0337 GMT
Content-Type: text/html
Content-Length: 162
Connection: keep-alive
Location: http://www.apelearn.com/
从结果中可以看到,我们想要的状态码就在第一行。所以,可以将curl的执行结果通过管道符进一步处理。但在这儿有个问题,curl的结果一旦加上管道符后,那么就会多出来一个如下内容的输出
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0   162    0     0    0     0      0      0 --:--:-- --:--:-- --:--:--     0
这个内容属于错误输出内容,需要做一下处理,加一个 2>/dev/null即可。

另外curl访问一个有问题的URL时,时间比较久,所以有必要给它加一个超时时间,比如设置为3秒,这样能保证即使这个URL有问题也能在3秒内执行完成。
code=`curl --connect-timeout 3 -I $1 2>/dev/null |grep 'HTTP'|awk '{print $2}'`

 

最终拿到状态码,需要做对比,看是否是2xx或者3xx。我的方法是使用grep做正则匹配:

 

echo $code |grep -qE '^2[0-9][0-9]|^3[0-9][0-9]'

【参考答案】

 

#!/bin/bash
if ! which curl &>/dev/null
then
echo "本机没有安装curl"
    yum install -y curl
if ! which curl &>/dev/null
then
echo "没有安装成功curl"
exit 1
fi
fi


code=`curl --connect-timeout 3 -I $1 2>/dev/null |grep 'HTTP'|awk '{print $2}'`


if echo $code |grep -qE '^2[0-9][0-9]|^3[0-9][0-9]'
then
echo "$1访问正常"
else
echo "$1访问不正常"
fi

 

  审核编辑:汤梓红

打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分