范例10-6:使用while守护进程的方式监控网站,每隔10秒确定一次网站是否正确。

#!/bin/bash

export LANG="zh_CN.UTF-8"

if [ $# -ne 1 ]; then
  echo "usage $0 url"
  exit 1
fi

wget -o /dev/null -T 5 --tries=1 $1  --spider    #--spider不下载任何文件
a=$?
echo "这个url没问题"
if [ $a -ne 0 ]
  then
    echo "这是一个有问题的url:$1"
else
  while true
  do
      sleep 10
      wget -o /dev/null -T 5 --tries=1 $1
      echo "这个网站是正常的"
  done
fi

另一种方式是使用curl测试:

curl -o /dev/null   --connect-timeout 5  -s  -w "%{http_code}\n" www.baidu.com:返回网页请求的状态码
-o:把输出写入到文件中
--connect-timeout:连接超时5s
-s:静默状态,不输出什么
和-w组合起来可以获得网页的请求的状态码

shell curl 取得HTTP返回的状态码
curl -I -m 10 -o /dev/null -s -w %{http_code} www.baidu.com
-I 仅测试HTTP头
-m 10 最多查询10s
-o /dev/null 屏蔽原有输出信息
-s silent
-w %{http_code} 控制额外输出
[root@localhost ~]# curl -o /dev/null --connect-timeout 5 -s -w %{http_code} www.baidu.com | egrep  "200|301|302" | wc -l #如果这个等于1,说明这个网站是正常的。

范例:10-7 使用while守护进程的方式监控网站,每隔10s确定一次网站是否正常。

参考答案1:引入函数库并且采用模拟用户访问的方式并引入邮件报警

#!/bin/bash


source /etc/init.d/functions

while true
do
  if [ "`curl -o /dev/null --connect-timeout 5 -s -w "%{http_code}\n" "$1" | egrep "200|301|302" | wc -l`" -eq 1 ]; then
    action "this is URL:$1 is ok"      /bin/true
  else
    action  "this is URL:$1 is bad"    /bin/false
    echo "this URL $1 is bad:`date +%F-%T`" | mail -s "URL test" ***@163.com
    break
  fi
  sleep 10
done

参考答案2:采用shell数组的方法,同时检测多个URL是否正常,并给出专业的展示效果,这是实际的工作所用的脚本。

#!/bin/bash

export LANG="zh_CN.UTF-8"

source /etc/init.d/functions

url=(
www.baidu.com
www.jd.comm
www.taobao.com
)
ss() {
i=2
while ((i>0))
do
  echo -n "."
  sleep 1
  ((i--))
done
printf ".\n"
}

aa() {
printf "测试准备中,请稍后"
ss

for ((a=0;a<3;a++))
do
  wget -o /dev/null -T 5 --tries=1 ${url[a]}
  b=$?
  if [ $b -eq 0 ]
    then
      action "this URL ${url[a]} is ok"  /bin/true
  else
    action "this URL ${url[a]} is bad"  /bin/false
    echo "这个URL是有问题的,请及时处理,时间定格在:"`date +%F-%T`"" | mail -s "URL test" 17858655319@163.com

  fi
done
}

while true
do
  aa
  sleep 10
done

image.png