监控你的站点访问是否正常
提醒:本文为合集文章,后续会持续更新!
关注我,持续学习shell脚本,每日提升!
【需求】
写一个监控脚本,监控某站点访问是否正常。
提示:
1)可以将访问的站点以参数的形式提供,例如shxxx。shwww。aminglinux。com
2)状态码为2xx或者3xx表示正常
3)正常时echo正常,不正常时echo不正常
【分析】
1)脚本是带有参数的,第一个参数就是要访问的站点URL,传递的第一个参数,在脚本里用1表示;
2)获取站点状态码,使用curl工具。其中curl的I参数只获取header信息,里面就包含状态码。例如:curlIwww。aminglinux。comHTTP1。1301MovedPermanentlyServer:nginxDate:Fri,02Dec202203:02:37GMTContentType:texthtmlContentLength:162Connection:keepaliveLocation:http:www。apelearn。com
从结果中可以看到,我们想要的状态码就在第一行。所以,可以将curl的执行结果通过管道符进一步处理。但在这儿有个问题,curl的结果一旦加上管道符后,那么就会多出来一个如下内容的输出TotalReceivedXferdAverageSpeedTimeTimeTimeCurrentDloadUploadTotalSpentLeftSpeed0162000000::::::0
这个内容属于错误输出内容,需要做一下处理,加一个2devnull即可。
另外curl访问一个有问题的URL时,时间比较久,所以有必要给它加一个超时时间,比如设置为3秒,这样能保证即使这个URL有问题也能在3秒内执行完成。codecurlconnecttimeout3I12devnullgrepHTTPawk{print2}
最终拿到状态码,需要做对比,看是否是2xx或者3xx。我的方法是使用grep做正则匹配:echocodegrepqE2〔09〕〔09〕3〔09〕〔09〕
【参考答案】!binbashif!whichcurldevnullthenecho本机没有安装curlyuminstallycurlif!whichcurldevnullthenecho没有安装成功curlexit1fificodecurlconnecttimeout3I12devnullgrepHTTPawk{print2}ifechocodegrepqE2〔09〕〔09〕3〔09〕〔09〕thenecho1访问正常elseecho1访问不正常fi
关注阿铭linux,助你持续提升!