本脚本出自 老男孩linux运维实战培训中心 shell编程课程脚本案例!
脚本功能:实现对公司网站的url地址检查,把故障通过邮件或者短信的形式报告给管理员,可以同时加入多个监控点,URL地址可以是实际网站地址,也可以是专门的地址,当然,我们也可以结合nagios等软件来实现。
1)脚本内容

   
   
   
   
    [root@nosql01 scripts]# cat check_url_by_oldboy.sh   
  1. #!/bin/bash  
  2. # this script is created by oldboy.  
  3. # e_mail:[email protected]  
  4. # qqinfo:49000448  
  5. function: oldboy trainning stripts,check_service.  
  6. # version:1.1   
  7. ################################################  
  8. # oldboy trainning info.        
  9. # QQ 1986787350 70271111  
  10. # site:http://www.etiantian.org  
  11. # blog:http://oldboy.blog.51cto.com  
  12. # oldboy trainning QQ group: 208160987 226199307  
  13. ################################################  
  14. #set -x  
  15. RETVAL=0  
  16. SCRIPTS_PATH="/server/scripts" 
  17. MAIL_GROUP="[email protected] [email protected]" 
  18. #MAIL_GROUP="18600338340 18911718229" 
  19. ## web detection function 
  20. LOG_FILE="/tmp/web_check.log" 
  21. function Get_Url_Status(){  
  22. FAILCOUNT=0  
  23. for (( i=1 ; $i <= 3 ; i++ ))   
  24.  do   
  25.     wget -T 15 --tries=1 --spider http://${1} >/dev/null 2>&1  
  26.     if [ $? -ne 0 ]  
  27.         then 
  28.          let FAILCOUNT+=1;  
  29.     fi  
  30. done  
  31.  
  32. #if 3 times then send mail.  
  33. if [ $FAILCOUNT -gt 1 ]  
  34.      then   
  35.        RETVAL=1  
  36.        NOW_TIME=`date +"%m-%d %H:%M:%S"`  
  37.        SUBJECT_CONTENT="http://${HOST_NAME} service is error,${NOW_TIME}." 
  38.        echo "send to :$MAIL_USER ,Title:$SUBJECT_CONTENT" >$LOG_FILE  
  39.        for MAIL_USER  in `$MAIL_GROUP`  
  40.        do  
  41.           mail -s "$SUBJECT_CONTENT " $MAIL_USER <$LOG_FILE  
  42.           #sh $SCRIPTS_PATH/sms_send $SUBJECT_CONTENT $MAIL_USER   
  43.        done  
  44. else 
  45.       RETVAL=0  
  46. fi  
  47. return $RETVAL  
  48. }  
  49. #func end.  
  50. [ ! -d "$SCRIPTS_PATH" ] && {  
  51.   mkdir -p $SCRIPTS_PATH  
  52. }  
  53.  
  54. [ ! -f "$SCRIPTS_PATH/domain.list" ] && {  
  55. cat >$SCRIPTS_PATH/domain.list<
  56. oldboy.blog.51cto.com  
  57. bbs.etiantian.org  
  58. EOF  
  59. }  
  60. #service check   
  61. for  HOST_NAME in `cat $SCRIPTS_PATH/domain.list`  
  62.    do  
  63.        echo -n "checking $HOST_NAME: " 
  64.        Get_Url_Status $HOST_NAME && echo ok||echo no 
  65.        #Get_Url_Status $HOST_NAME  
  66. done 

2)演示结果
[root@nosql01 scripts]# sh check_url_by_oldboy.sh
checking oldboy.blog.51cto.com: ok
checking bbs.etiantian.org: no
提示:上面我们看到的仅仅是为了调试而加的,后台已经对故障站进行了邮件及短信报警。

3)生产用法
实际工作中,我们可以结合定时任务调用脚本检查,甚至可以稍加改进,在服务的重启过程中进行检查。