监控网站URL是否正常最常见的方法莫过于wget和curl命令了,这两个命令都是非常强大的,强大到网友查看帮助都无从选择的地步了,今天呢,老男孩老师正好录制Shell编程实战课程,因此,顺便总结了一下和大家分享。
1.1 wget命令
wget命令的参数非常多,至少也有数十个, 但是运维工作中常用的并不多,老男孩老师把最有用的列表如下。
wget命令
|
下载网页或文件
|
--spider
|
模拟爬虫的行为去访问网站,但不会下载网页
|
-q, --quiet
|
安静的访问,禁止输出,类似-o /dev/null功能
|
-o, --output-file=FILE
|
记录输出到文件
|
-T, --timeout=SECONDS
|
访问网站的超时时间
|
-t, --tries=NUMBER
|
当网站异常时重试网站的次数
|
实际监控方法如下:利用wget命令返回值确定网站是否正常
[root@oldboy ~]# wget --spider -T 5 -q -t 2 http://www.baidu.com/index.html
[root@oldboy ~]# echo $? #<==利用返回值确定网站是否正常。
0
1.2 curl命令
curl命令的参数比wget的参数还多,但运维中常用的参数也并不多,因此也是列表如下:
curl命令
|
访问网站url
|
-I/--head
|
显示响应头信息
|
-m/--max-time <seconds>
|
访问超时的时间
|
-o/--output <file>
|
记录访问信息到文件
|
-s/--silent
|
沉默模式访问,就是不输出信息
|
-w/--write-out <format>
|
以固定特殊的格式输出,例如:%{http_code},输出状态码
|
实际监控方法如下:
1、利用curl命令返回值确定网站是否正常
[root@localhost ~]# echo $?
0
2、获取命令执行后的状态码(200表示正常)
[root@localhost ~]# curl -I -m 5 -s -w "%{http_code}
" -o /dev/null www.baidu.com
200
1.3 开发Shell脚本实现监控指定的URL是否正常
解答:
方法1:
1 #!/bin/sh 2 #帮助函数usage() 3 function usage() { 4 echo $"usage:$0 url" 5 exit 1 6 } 7 #检测URL函数check_url() 8 function check_url() { 9 #<==采用wget返回值方法,这里的$1就是函数传参。 10 wget --spider -q -o /dev/null --tries=1 -T 5 $1 11 #curl -s -o /dev/null $1 #<==采用curl返回值方法也是可以的。 12 if [ $? -eq 0 ] 13 then 14 echo "$1 is yes." 15 exit 0 16 else 17 echo "$1 is fail." 18 exit 1 19 fi 20 } 21 function main() { #<==主函数。 22 if [ $# -ne 1 ] #<==如果传入的多个参数,则打印帮助函数,提示用户。 23 then 24 usage 25 else 26 check_url $1 #<==接收函数的传参,即把结尾的$*传到这里。 27 fi 28 } 29 main $* #<==这里的$*就是把命令行接收的所有参数作为函数参数传给函数内部,常用手法。 30 实践结果: 31 [root@localhost ~]# sh checkurl.sh www.baidu.com 32 www.baidu.com is ok 33 [root@oldboy ~]# sh checkurl.sh 10.0.0.8 34 10.0.0.8 is fail 35 方法2: 36 [root@localhost ~]# cat checkurl1.sh 37 #!/bin/bash 38 ############################################################## 39 # File Name: checkurl.sh 40 # Version: V1.0 41 # Author: oldboy 42 # Organization: https://www.cnblogs.com/putihuakai/ 43 # Created Time : 2019-06-07 18:29:19 44 ############################################################## 45 usage(){ 46 echo "Usage:$0 url" 47 exit 1 48 } 49 checkurl(){ 50 local num=`curl -I -m 5 -s -w "%{http_code} " -o /dev/null|grep 200|wc -l` 51 if [ $num -eq 1 ] #<==采用获取状态码,并转为数字的方式判断,如果301认为正确也可以加上egrep过滤。 52 then 53 echo "$1 is ok" 54 else 55 echo "$1 is fail" 56 fi 57 } 58 main(){ 59 if [ $# -ne 1 ] 60 then 61 usage 62 else 63 checkurl $1 64 fi 65 } 66 main $*
实践结果:
[root@localhost ~]# sh checkurl.sh www.baidu.com
www.baidu.com is ok
[root@localhost ~]# sh checkurl.sh 10.0.0.8
10.0.0.8 is fail