#!/bin/bashexport LANG="zh_CN.UTF-8"if [ $# -ne 1 ]; then echo "usage $0 url" exit 1fiwget -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 "这个网站是正常的" donefi
另一种方式是使用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/bashsource /etc/init.d/functionswhile truedo 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 10done
参考答案2:采用shell数组的方法,同时检测多个URL是否正常,并给出专业的展示效果,这是实际的工作所用的脚本。
#!/bin/bashexport LANG="zh_CN.UTF-8"source /etc/init.d/functionsurl=(www.baidu.comwww.jd.commwww.taobao.com)ss() {i=2while ((i>0))do echo -n "." sleep 1 ((i--))doneprintf ".\n"}aa() {printf "测试准备中,请稍后"ssfor ((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 fidone}while truedo aa sleep 10done
企业生产实践:监控web服务器是不是正常的
原文地址:http://blog.51cto.com/11726212/2069698