shell脚本监控网站并实现邮件、短信报警
shell进程监控脚本(发送邮件报警)
Shell脚本监控服务器在线状态和邮件报警的方法

http://www.jbxue.com/jb/shell/

11.

  1. #!/bin/bash
  2. a="/tmp/test.log"
  3. while [[ -f $a ]];
  4. do
  5. sleep 1;
  6. size=`ls -lrt $a | cut -d " " -f 5`
  7. echo $size
  8. if [ $size -ge 1024 ];
  9. then
  10. logrotate /etc/logrotate.conf;
  11. fi
  12. done
  13.  
  14. a="/mnt/fileserver/daq/check"
  15. if [ ! -f $a ]
  16. do
  17. echo "nfs server is donw"|mail -v -s "nfs" createyuan@sohu.com createyuan1@163.com 403185951@qq.com
  18. fi
  19.  
  20. http://blog.csdn.net/gujing001/article/details/7110589 Shell处理字符串常用方法

10.

  1. 请输入要连接的主机
  2.  
  3. #!/bin/bash
  4. #written by wubo
  5. #blog:blog.csdn.net/wbls615117
  6. while :
  7. do
  8. echo "请输入你要进行的操作:"
  9. select var in "edit file" "view ip" "delete file" "change directory" "exit" "view directory"
  10. do
  11. break
  12. done
  13. case $var in
  14. "edit file")
  15. echo -n "please input edit file:"
  16. read file
  17. vim $file
  18. echo '编辑文件成功'
  19. ;;
  20. "view ip")
  21. echo -n "please input device name:"
  22. read file
  23. ifconfig $file
  24. echo '显示IP地址成功'
  25. ;;
  26. "delete file")
  27. echo -n "please input delete file:"
  28. read file
  29. rm -rf $file
  30. echo '成功删除文件'
  31. ;;
  32. "change directory")
  33. echo -n "please input change directory:"
  34. read file
  35. cd $file
  36. echo "当前目录为:$(pwd)"
  37. ;;
  38. "view directory")
  39. echo -n "please input a directory:"
  40. read file
  41. ls $file
  42. echo "目录浏览成功"
  43. ;;
  44. "exit")
  45. break
  46. echo '退出成功'
  47. ;;
  48. *)
  49. break
  50. echo '退出成功'
  51. ;;
  52. esac
  53. done

9.

  1. #!/bin/bash
  2. IP=`ifconfig eth0 | grep "inet addr" | cut -f -d ":" | cut -f -d " "`
  3. tomcat_dir="/opt/apache-tomcat-7.0.8"
  4. mysql_dir="/usr/local/mysql/bin/mysqld_safe"
  5. vsftp_dir="/usr/sbin/vsftpd"
  6. ssh_dir="/usr/sbin/sshd"
  7. for dir in $tomcat_dir $mysql_dir $vsftp_dir $ssh_dir
  8. do
  9. process_count=$(ps -ef | grep "$dir" | grep -v grep | wc -l)
  10. for service in tomcat mysql vsftp ssh
  11. do
  12. echo "$dir" |grep -q "$service"
  13. if [ $? -eq ]
  14. then
  15. if [ $process_count -eq ]
  16. then
  17. echo "$service is down at $(date +%Y%m%d%H:%M:%S)" >>/usr/monitor/process/process_$(date +%Y%m%d).log
  18. echo "$service is down at $(date +%Y%m%d%H:%M:%S)" | mail -s "$IP服务器 $service服务关闭告警" XXXX@qq.com
  19. else
  20. echo "$service is running at $(date +%Y%m%d%H:%M:%S)" >>/usr/monitor/process/process_$(date +%Y%m%d).log
  21. fi
  22. else
  23. continue
  24. fi
  25. done
  26. done

8.监控日志特定内容

  1. # cat cpu_bug_monitor.sh
  2. #!/bin/bash
  3. grep "BUG: soft lockup - CPU#" /var/log/messages
  4. if [ $? -eq ] ; then
  5. counter=`grep "BUG: soft lockup - CPU#" /var/log/messages | wc -l `
  6. echo "`date` ## CPU BUG: $counter times" | mutt -s "CPU BUG" ****@.com
  7. echo "`date` ## CPU BUG: $counter times" >> /tmp/CPU_BUG_STATUS
  8. else
  9. echo "`date` ## Check CPU BUG normal" >> /tmp/CPU_BUG_STATUS
  10. fi
  11.  
  12. 一旦发现日志中出现"BUG: soft lockup - CPU#"将统计次数并发送到1397710****@.com邮箱。如果正常就记录检查时间和结果到/tmp/CPU_BUG_STATUS

7.base64bash实现

  1. base64Table=(A B C D E F G H I J K L M N O P Q R S T U V W X Y Z a b c d e f g h i j k l m n o p q r s t u v w x y z + /);
  2.  
  3. function str2binary() {
  4. idx=;
  5. for((i=; i<${#str}; i++)); do
  6. dividend=$(printf "%d" "'${str:i:1}");
  7. for((j=;j<;j++)); do
  8. let idx=*i+-j;
  9. let bin[$idx]=$dividend%;
  10. dividend=$dividend/;
  11. done;
  12. done;
  13. let idx=${#str}*;
  14. for((i=; i<appendEqualCnt*; i++)); do
  15. let bin[$idx]=;
  16. let idx++;
  17. done;
  18. }
  19. function calcBase64() {
  20. for((i=; i<${#bin[*]}/; i++)); do
  21. sum=;
  22. for((j=; j<; j++)); do
  23. let idx=i*+j;
  24. let n=--j;
  25. let sum=sum+${bin[$idx]}***n;
  26. done;
  27. echo -n ${base64Table[$sum]};
  28. done
  29. }
  30.  
  31. declare -a bin
  32. function base64Encode() {
  33. read -p "please enter ASCII string:" str;
  34. let appendZero=${#str}*%;
  35. let bits=${#str}*;
  36. appendEqualCnt=;
  37. if [[ $appendZero -ne ]]; then
  38. let appendEqualCnt=(-$appendZero)/;
  39. fi
  40. str2binary;
  41. calcBase64;
  42. if [[ $appendEqualCnt -eq ]]; then
  43. echo -n "==";
  44. elif [[ $appendEqualCnt -eq ]]; then
  45. echo -n "=";
  46. fi
  47. echo;
  48.  
  49. }

6.颜色码表

  1. [root@-shiyan prog]# cat color
    ## the test text
  2. T='samples'echo
  3. echo " default 40m 41m 42m 43m 44m 45m 46m 47m"
  4. ## FG 为前景(foreground)色, BG 为背景(background)色
  5. for FGs in ' m' ' 1m' ' 30m' '1;30m' ' 31m' '1;31m' ' 32m' '1;32m' ' 33m' '1;33m' ' 34m' '1;34m' ' 35m' '1;35m' ' 36m' '1;36m' ' 37m' '1;37m'
  6. do
  7. FG=$(echo $FGs|tr -d ' ')
  8. echo -en " $FGs \033[$FG $T "
  9. for BG in 40m 41m 42m 43m 44m 45m 46m 47m;
  10. do
  11. echo -en " \033[$FG\033[$BG $T \033[0m"
  12. done
  13. echo
  14. done
  15. echo

5.批量检测url地址是否可以访问的两种写法,for与while

  1. 训练点
    1.错误时记录到文件中并且同时在控制台输出
    2.从文件中循环读入参数,正确错误都记录到文件中,并且在错误时发邮件。
  2.  
  3. ####输入1:
  4. [root@-shiyan prog]# cat web
  5. #!/bin/bash
  6. monitor_dir=/tmp/monitor/
  7. if [ ! -d $monitor_dir ]
  8. then
  9. mkdir $monitor_dir
  10. fi
  11.  
  12. cd $monitor_dir
  13. web_stat_log=web.status
  14.  
  15. if [ ! -f $web_stat_log ]
  16. then
  17. touch $web_stat_log
  18. fi
  19.  
  20. server_list_file=server.list
  21.  
  22. if [ ! -f $server_list_file ]
  23. then
  24. echo "`date '+%Y-%m-%d %H:%M:%S'` ERROR:$server_list_file NOT exists!" |tee -a $web_stat_log
  25. exit
  26. fi
  27.  
  28. for website in `cat $server_list_file`
  29. do
  30. url="http://$website"
  31. server_status_code=`curl -o /dev/null -s -m --connect-timeout -w %{http_code} "$url"`
  32. if [ "$server_status_code" = "" ]
  33. then
  34. echo "`date '+%Y-%m-%d %H:%M:%S'` visit $website status code 200 OK" >>$web_stat_log
  35. else
  36. echo "`date '+%Y-%m-%d %H:%M:%S'` visit $website error!!! server can't connect at 10s or stop response at 10 s, send alerm sms ..." >>$web_stat_log
  37. # echo "!app alarm @136xxxxxxxx server:$website can't connect at 10s or stop response at 10s ..." | nc smsserver port &
  38. fi
  39. done
  40.  
  41. exit
  42.  
  43. ####输入2:
  44. [root@-shiyan prog]# cat server.list
  45. www..com
  46. www..com
  47. www..com
  48. www..com
  49. www..net
  50. www..net
  51. www..org
  52. www..org
  53. www..cn
  54.  
  55. ####输出:
  56. [root@-shiyan prog]# cat /tmp/monitor/web.status
  57. -- :: ERROR:server.list NOT exists!
  58. -- :: visit www..com error!!! server can't connect at 10s or stop response at 10 s, send alerm sms ...
  59. -- :: visit www..com error!!! server can't connect at 10s or stop response at 10 s, send alerm sms ...
  60. -- :: visit www..com error!!! server can't connect at 10s or stop response at 10 s, send alerm sms ...
  61. -- :: visit www..com error!!! server can't connect at 10s or stop response at 10 s, send alerm sms ...
  62. -- :: visit www..net error!!! server can't connect at 10s or stop response at 10 s, send alerm sms ...
  63. -- :: visit www..net error!!! server can't connect at 10s or stop response at 10 s, send alerm sms ...
  64. -- :: visit www..org status code OK
  65. -- :: visit www..org status code OK
  66. -- :: visit www..cn status code OK
  67.  
  68. ####另外一种写法
  69. ####输入:
  70. [root@-shiyan prog]# cat web1
  71. #!/bin/bash
  72. while read URL
  73. do
  74. echo `date`
  75. result=`curl -o /dev/null -s -m --connect-timeout -w %{http_code} $URL`
  76. test=`echo $result`
  77. if [[ "$test" = "" ]]
  78. then
  79. echo "$URL is ok"
  80. else
  81. echo "$URL is err"
  82. #/usr/sbin/sendmail -t << EOF
  83. #From:SD-Detect
  84. #To:@.com,@.com
  85. #Subject:Detected $URL
  86. #------------------------------
  87. #${URL} is err!!
  88. #------------------------------
  89. #EOF
  90. fi
  91. done < /root/sh/prog/server.list
  92.  
  93. [root@-shiyan prog]# bash web1
  94. Tue Feb :: CST
  95. www..com is err
  96. Tue Feb :: CST
  97. www..com is err
  98. Tue Feb :: CST
  99. www..com is err
  100. Tue Feb :: CST
  101. www..com is err
  102. Tue Feb :: CST
  103. www..net is err
  104. Tue Feb :: CST
  105. www..net is err
  106. Tue Feb :: CST
  107. www..org is ok
  108. Tue Feb :: CST
  109. www..org is ok
  110. Tue Feb :: CST
  111. www..cn is ok

4.

  1. 训练点:
  2. .从格式化的输入文件中将字段分别分配给read的三个变量
  3. .awk的与或判断
  4. .如果错误日志有内容,则将错误内容定义为一个变量,然后传递给邮件函数和短信函数以便通知
  5. .首次执行时,因为没有Curl_Out.txtCurl_Out_1.txt文件,会出错,所以第一次先注释掉,然后再打开,就会每次都将以前的内容删掉,重新记录。
  6.  
  7. ####输入1:
  8. [root@-shiyan monitor]# cat aa
  9. #!/bin/bash
  10. smail() {
  11. mail -s "$1" createyuan@sohu.com <<EOF
  12. $
  13. $
  14. ====
  15. report time: `date +"%F %T"`
  16. shell script: `echo $`
  17. current user: `whoami`
  18. ====
  19. EOF
  20. }
  21.  
  22. ssms() {
  23. /usr/local/feixin/fetion --mobile= --pwd=******** --to= --msg-gb="fx $1"
  24. }
  25.  
  26. cd /tmp/monitor
  27. File=server.list
  28. #sed -i /.*/d Curl_Out.txt
  29. #sed -i /.*/d Curl_Out_1.txt
  30.  
  31. sed -e '/^#/d;/^$/d' ${File} | while read Ip Port URL
  32. do
  33. /usr/bin/curl --connect-timeout --max-time -o /dev/null -s -w %{time_total}:%{size_download}:%{http_code} http://${URL} -x ${Ip}:${Port} >> Curl_Out.txt
  34. echo ":${Ip}:${URL}" >> Curl_Out.txt
  35. done
  36.  
  37. awk -F":" '{if(($1*1000<8000)&&($2>0)&&($3=="200"||$3=="301"||$3=="302"||$3=="401")) {} else {print $0 >> "Curl_Out_1.txt"}}' Curl_Out.txt
  38.  
  39. if [ -s Curl_Out_1.txt ]
  40. then
  41. Warning="`awk '{printf("%s\n",$0)}' Curl_Out_1.txt`"
  42. #ssms ${Warning}
  43. smail CURL_Monitor ${Warning}
  44. fi
  45. 输入2
  46. [root@-shiyan monitor]# cat server.list
  47. 192.168.2.2 192.168.2.2
  48. 192.168.2.84 192.168.2.84/monitor
  49. 192.168.2.222 192.168.2.222
  50. 192.168.2.225 192.168.2.225
  51. [root@-shiyan monitor]# ls
  52. aa server.list
  53.  
  54. 输出1:到文件中
  55. [root@-shiyan monitor]# bash aa
  56. [root@-shiyan monitor]# ls
  57. aa Curl_Out_1.txt Curl_Out.txt server.list
  58. [root@-shiyan monitor]# cat Curl_Out.txt
  59. 0.044:::192.168.2.2:192.168.2.2
  60. 0.004:::192.168.2.84:192.168.2.84/monitor
  61. 0.050:::192.168.2.222:192.168.2.222
  62. 0.027:::192.168.2.225:192.168.2.225
  63. [root@-shiyan monitor]# cat Curl_Out_1.txt
  64. 0.004:::192.168.2.84:192.168.2.84/monitor
  65. 输出2:到邮件中,以下是内容
  66. CURL_Monitor
  67. 0.004:::192.168.2.84:192.168.2.84/monitor
  68. ====
  69. report time: -- ::
  70. shell script: aa
  71. current user: root
  72. ====

3.

2.监控磁盘并发邮件

  1. ####第一步安装mail客户端,写邮件地址,写脚本
  2. [root@-shiyan ~]# vi disk
  3. #!/bin/bash
  4. yum install mail
  5. mailaddr=createyuan1@.com
  6. smtpserver=smtp..com
  7. user=createyuan1
  8. passwd=*******
  9. cat <<EOF >/etc/mail.rc
  10. set from=$mailaddr
  11. set smtp=$smtpserver
  12. set smtp-auth=login
  13. set smtp-auth-user=$user
  14. set smtp-auth-password=$passwd
  15. EOF
  16.  
  17. space=`df|sed -n '/\/$/p'|gawk '{print $5}'|sed 's/%//'`
  18. if [ $space -ge ]
  19. then
  20. echo "disk is $space" >/tmp/test
  21. mail -v -s "testse" createyuan@sohu.com < /tmp/test
  22. fi
  23.  
  24. ####第二步加入计划任务中执行
  25. [root@-shiyan ~]# crontab -e
  26. no crontab for root - using an empty one
  27. crontab: installing new crontab
  28. [root@-shiyan ~]# crontab -l
  29. * * * * bash /root/disk
  30.  
  31. [root@250-shiyan prog]# cat disk1
    #!/bin/bash
    while sleep 5
      do
        for i in `df -h |sed -n '/\/$/p'|awk '{print $5}'|sed 's/\%//g'`
             do echo $i
             if [ $i -ge 10 ]
             then
             echo "the disk is "
             fi
             done
      done

1.样例

  1. 如果是139邮箱还可免费手机短信通知。
  2. 注:通过系统直接发送mail容易被拦截,可使用mail连接第三方smtp发送邮件。
  3.  
  4. #!/bin/bash
  5. for URL in http://www.abc.com http://www.88888.cn
  6. do
  7. #获取http响应代码
  8. HTTP_CODE=`curl -o /dev/null -s -w "%{http_code}" "${URL}"`
  9. #服务器能正常响应,应该返回200的代码
  10. if [ $HTTP_CODE = 200 ]
  11. then
  12. echo "$URL is OK" | /bin/mail -s "Http Check" qq@163.com
  13. # else
  14. # /usr/local/fetion/fetion --mobile=1356440xxxx --pwd 123456 --to=1885151xxxx --msg-utf8="$URL is ERROR; error code is $HTTP_CODE"
  15. fi
  16. done
  17.  
  18. 主要是利用 curl -o /dev/null -s -m 10 --connect-timeout 10 -w %{http_code} "$url" 返回状态码是否200,如果10s没有返回200状态码,则发警报
  19.  
  20. -o 参数,是把下载的所有内容都重定向到/dev/null,-s命令,是屏蔽了curl本身的输出,而-w参数,是根据我们自己的需要,自定义了curl的输出格式。
  21. 使用这条命令,再配合邮件和短信,就可以实现对页面的可用性监控。将这个程序部署在全国各地的机器上,就可以对cdn网络进行可用性监控。
  22. curl只返回服务器响应状态,不返回内容,返回200是正常的,其它的不正常,简单的命令如下:
  23.  
  24. [coomix@localhost ~]$ echo `curl -o /dev/null -s -m 10 --connect-timeout 10 -w %{http_code} "http://www.jbxue.com/index.php"`
  25. 200
  26. [coomix@localhost ~]$ echo `curl -o /dev/null -s -m 10 --connect-timeout 10 -w %{http_code} "http://www.jbxue.com/index5.php"`
  27. 404

shell脚本实例-系统监控的更多相关文章

  1. shell脚本实例-实现监控tcp的链接状态另一种方式批量创建用户

    Array实现TCP的链接状态 #!/usr/bin/bash declare -A status type=`ss -an | grep :80|awk '{print $2}'` for i in ...

  2. 分享7个shell脚本实例--shell脚本练习必备

    概述 看多shell脚本实例自然就会有shell脚本的编写思路了,所以我一般比较推荐看脚本实例来练习shell脚本.下面分享几个shell脚本实例. 1.监测Nginx访问日志502情况,并做相应动作 ...

  3. 使用shell+python脚本实现系统监控并发送邮件

    1.编辑shell脚本 [root@web03 ~/monitor_scripts]# cat inspect.sh #!/bin/bash # 设置磁盘的阀值 disk_max=90 # 设置监控i ...

  4. shell脚本实例,通向shell脚本大师的必经之路

    概述 读书百遍其义自见,shell脚本也是,只要例子看得多了,自然就知道怎么写了.这里主要整理了20几个例子,因为内容比较多,所以分了几次来做介绍了.下面的实例最好先自己思考怎么去实现,然后再看下实现 ...

  5. linux shell脚本守护进程监控svn服务

    最近搭建的svn服务不知道什么原因服务总是被关闭(如果你不知道怎么搭建svn可以参考linux下搭建svn版本控制软件),因此用shell脚本实现一个守护进程.用于监控svn服务是否启动,如果服务不在 ...

  6. Shell脚本日志关键字监控+告警

    最近小张的爬虫程序越来越多,可当爬虫程序报错,不能及时的发现,从而造成某些重要信息不能及时获取的问题,更有甚者,遭到领导的批评.于是就在想有没有一种方法,当爬取信息报错的时候,可以通过邮件或者短信的方 ...

  7. shell脚本实例

    备注:一些与传递给shell的参数相关的变量:$# 命令行参数的个数$? 调用命令的返回值$$ 当前进程的进程号$! 最后一个后台命令的进程号$0 命令行的第一个参数,也就是命令名$n 命令行的第n个 ...

  8. shell脚本实例一,移动文件夹中大于2000B的文件到另一个文件夹

    shell脚本能帮我们简化linux下的一些工作,现在有个需求,把TMPA文件夹下大于2000B的文件都移动到TMPB下 #! /bin/bash function movefiles() { ` d ...

  9. shell脚本实例一

    一. 什么是shell 脚本时一种解释性语言: shell脚本保存执行动作: 脚本判定命令的执行条件 脚本来实现动作的批量执行.二.如何创建 vim  test.sh     ##shell脚本一般都 ...

随机推荐

  1. php大力力 [003节]php在百度文库的几个基础教程mac环境下文本编辑工具

    2015-08-22 php大力力003.mac环境下文本编辑工具 在windows下,使用notepad特别多.在mac下使用“备忘录”app,word,反而没有存储过txt后缀等不同文本. mac ...

  2. Linux物理内存相关数据结构

    节点:pg_data_t typedef struct pglist_data { zone_t node_zones[MAX_NR_ZONES]; zonelist_t node_zonelists ...

  3. Android Focusable in Touch Mode 介绍

    在学习 ListView 源码时,发现了 Focusable in Touch Mode 这个概念,注释的意思是: whether this view can receive focus while ...

  4. Android pix转换为sp

    /** * 把pix值转换为sp * * @return */ public static float px2sp(Context context, float pixValue) { final f ...

  5. 7、网页制作Dreamweaver(悬浮动态分层导航)

    悬浮动态分层导航的制作: 1.首先在<head>里面引用一个JQUERY的文件以用来制作鼠标点击动画效果(从网站上下载即可) <script language="javas ...

  6. JLOI 斯迈利的赌注

    直接高精度模拟,加上简单贪心 Program XJOI2263; ..] of longint; var a,b:arr; s1,s2:ansistring; i,j:longint; sum:int ...

  7. 【转】自动化任务运行器 Grunt 迅速上手

    原文转自:http://blog.jobbole.com/51586/ 这篇文章将带领你用Grunt来提速和优化网站开发的流程.首先我们会简短介绍Grunt的功能,然后我们直接上手,介绍如何用Grun ...

  8. WinEdt和TeXworks编辑LaTeX文件乱码问题

    WinEdt默认使用的是系统编码,windows下可以认为是 GBK编码,而TeXworks默认使用的是UTF8编码,所以要统一这两个编码,才能保证两个文件互相打开不会乱码. 具体方法如下: 一,可以 ...

  9. 优先队列(Priority Queue)

    优先队列(Priority Queue) A priority queue must at least support the following operations: insert_with_pr ...

  10. 【转】Hbase shell 常用命令

    不定时更新常用好用命令. --------------------------------------------------------------------------------------- ...