前言

监控网站URL是否正常最常见的方法莫过于 wgetcurl 命令了,这两个命令都是非常强大的,强大到通过查看帮助都无从选择的地步。
但我们还是要花时间去研究下,研究好了事半功倍。

wget

wget命令的参数非常多,至少也有数十个, 但是运维工作中常用的并不多,其中最有用的列表如下:

命令参数 用途说明
wget 下载网页或文件
–spider 模拟爬虫的行为去访问网站,但不会下载网页
-q, --quiet 安静的访问,禁止输出,类似-o /dev/null功能
-o, --output-file=FILE 记录输出到文件
-T, --timeout=SECONDS 访问网站的超时时间
-t, --tries=NUMBER 当网站异常时重试网站的次数

wget监控方法示例

利用wget命令返回值确定网站是否正常

1
2
3
# wget --spider -T 5 -q -t 2 www.sobaigu.com
# echo $? //利用返回值确定网站是否正常。
 0

curl

curl命令的参数比wget的参数还多,但运维中常用的参数也并不多,因此也是列表如下:

命令参数 用途说明
curl命令 访问网站url
-I, --head 显示响应头信息
-m, --max-time 访问超时的时间
-o, --output 记录访问信息到文件
-s, --silent 沉默模式访问,就是不输出信息
-w, --write-out 以固定特殊的格式输出,例如:%{http_code},输出状态码

curl监控方法示例

利用curl命令返回值确定网站是否正常

1
2
3
4
# curl -s -o /dev/null www.sobaiguu.com
# echo $?

 0

获取命令执行后的状态码(200表示正常)

1
2
3
# curl -I -m 5 -s -w "%{http_code}\n" -o /dev/null www.sobaigu.com

 200

一段Shell脚本实现监控指定的URL是否正常

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#!/bin/sh

function usage(){ //帮助函数
echo $"usage:$0 url"
 exit 1
}

function check_url(){ //检测URL函数。
 wget --spider -q -o /dev/null --tries=1 -T 5 $1
//采用wget返回值方法,这里的$1就是函数传参
//采用curl返回值方法也是可以的
//curl -s -o /dev/null $1

 if [ $? -eq 0 ]; then
echo "$1 is yes."
exit 0
 else
  echo "$1 is fail."
 exit 1
 fi
}

function main(){ //主函数。
//如果传入的多个参数,则打印帮助函数,提示用户
 if [ $# -ne 1 ]; then
 usage
 fi
 check_url $1 //接收函数的传参,即把结尾的$*传到这里
}

main $* //这里的$*就是把命令行接收的所有参数作为函数参数传给函数内部,常用手法