[转帖]shell-脚本集合2(monitor)_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 5121 | 回复: 0   主题: [转帖]shell-脚本集合2(monitor)        下一篇 
Leon
注册用户
等级:少校
经验:1436
发帖:116
精华:7
注册:2013-1-4
状态:离线
发送短消息息给Leon 加好友    发送短消息息给Leon 发消息
发表于: IP:您无权察看 2013-1-4 14:03:13 | [全部帖] [楼主帖] 楼主

1 crontab

  1. crontab -l 
  2. #ping 
  3. */1 * * * * /root/xianshang_sh/chk_ping.sh >> /root/xianshang_sh/cron_log 2>&1 
  4. #mysql_replicate 
  5. */1 * * * * /root/xianshang_sh/chk_mysql_replicate.sh >> /root/xianshang_sh/cron_log 2>&1 
  6. #df 
  7. */1 * * * * /root/xianshang_sh/chk_df.sh >> /root/xianshang_sh/cron_log 2>&1 
  8. #load 
  9. */1 * * * * /root/xianshang_sh/chk_load.sh >> /root/xianshang_sh/cron_log 2>&1 
  10. #web 
  11. */1 * * * * /root/xianshang_sh/chk_web.sh >> /root/xianshang_sh/cron_log 2>&1 


2 配置文件

  1. cat CONFIG
  2. MOBILES="13xxxxxxxxx 18xxxxxxxxx 13xxxxxxxxx" 
  3. MAILS="dongnan@xxx.com" 
  4. ESXI_HOSTS="192.168.57.91 192.168.57.93" 
  5. PHYSICAL_HOSTS="192.168.57.112 192.168.0.1 192.168.57.99" 
  6. LINUX_WEB_HOSTS="192.168.57.82 192.168.57.70 10.0.100.72 10.0.100.73 10.0.100.75 10.0.100.76 10.0.100.77 10.0.100.78" 
  7. WIN_WEB_HOSTS="10.0.100.81 10.0.100.83" 
  8. DB_SLAVE_HOSTS="10.0.100.82" 
  9. ALLHOSTS="$ESXI_HOSTS $PHYSICAL_HOSTS $LINUX_WEB_HOSTS $WIN_WEB_HOSTS $DB_SLAVE_HOSTS" 


3 检查网络

  1. cat chk_ping.sh
  2. #!/bin/bash 
  3. # 
  4. #Use the ping command to check network 
  5. # 
  6. #$ ping -f -c 10 10.0.100.1 
  7. #PING 10.0.100.1 (10.0.100.1) 56(84) bytes of data. 
  8. #.........E 
  9. #--- 10.0.100.1 ping statistics --- 
  10. #10 packets transmitted, 0 received, +3 errors, 100% packet loss, time 120ms 
  11. #, pipe 3 
  12. #$ ping -f -c 10 10.0.100.71 
  13. #PING 10.0.100.71 (10.0.100.71) 56(84) bytes of data. 
  14. # 
  15. #--- 10.0.100.71 ping statistics --- 
  16. #10 packets transmitted, 10 received, 0% packet loss, time 0ms 
  17. #rtt min/avg/max/mdev = 0.003/0.009/0.056/0.015 ms, ipg/ewma 0.029/0.019 ms 
  18. # 
  19. #$ echo $? 
  20. #1 #返回值1 
  21. # 
  22. #variables 
  23. ping=/bin/ping 
  24. DELAY_LIMIT=100 
  25. LOSS_LIMIT=20 
  26. sh_dir=/root/xianshang_sh/ 
  27. crondir=${sh_dir}crontab 
  28. source ${sh_dir}CONFIG 
  29. hosts="$ALLHOSTS" 
  30. #main 
  31. #每个ip 
  32. for HOST in $hosts ;do 
  33. flag_ping_file="$crondir/log/$HOST.ping" 
  34. flag_ping_fatal="$crondir/log/$HOST.ping.fatal" 
  35. error_log="$crondir/log/ping_error.log" 
  36. #返回值0,定义delay 与 loss 变量 
  37. if $ping -f -c 50 $HOST >$crondir/log/ping.log;then 
  38.  grep "rtt min" $crondir/log/ping.log >$crondir/log/ping.delay 
  39.  grep "packet loss" $crondir/log/ping.log >$crondir/log/ping.loss 
  40.  delay=`awk -F= '{print $2}' $crondir/log/ping.delay | awk -F/ '{print $2}'| awk -F. '{print $1}'` 
  41.  loss=`awk '{print $6}' $crondir/log/ping.loss | awk -F% '{print $1}'` 
  42. #判断delay 或者loss 大于规定限制,则发送报警邮件 
  43.  if [ "$delay" -ge "$DELAY_LIMIT" -o "$loss" -ge "$LOSS_LIMIT" ];then 
  44.  if [ ! -f $flag_ping_file ];then 
  45.  #for mobile in $MOBILES;do 
  46.  #echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  47.  #done 
  48.  echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | mail -s "$HOST delay" $MAILS 
  49.  date +'%F %T' >>$error_log 
  50.  cat $crondir/log/ping.log >>$error_log 
  51. #生成用于判断的flag文件 
  52.  echo "$HOST network error" >$flag_ping_file 
  53.  fi 
  54.  fi 
  55. #判断delay 或者loss 小于规定限制,则发送解除报警邮件 
  56.  if [ "$delay" -lt "$DELAY_LIMIT" -a "$loss" -lt "$LOSS_LIMIT" -a -f $flag_ping_file ];then 
  57.  echo "$HOST network ok" | mail -s "$HOST nk ok" $MAILS 
  58.  rm -f $flag_ping_file 
  59.  if [ -f $flag_ping_fatal ];then 
  60.  #for mobile in $MOBILES;do 
  61.  #echo "$HOST network ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  62.  #done 
  63. #删除用于判断的flag文件 
  64.  rm -f $flag_ping_fatal 
  65.  fi 
  66.  fi 
  67. # 
  68. else 
  69. #返回值1,则直接判断为失败,发送报警邮件 
  70.  if [ ! -f $flag_ping_fatal ];then 
  71.  #for mobile in $MOBILES;do 
  72.  #echo "Monitor to $HOST fatal;100% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  73.  #done 
  74.  echo "Monitor to $HOST fatal;100% packet loss" | mail -s "$HOST loss" $MAILS 
  75.  date +'%F %T' >>$error_log 
  76.  cat $crondir/log/ping.log >>$error_log 
  77.  echo "$HOST network fatal" >$flag_ping_fatal 
  78.  echo "$HOST network error" >$flag_ping_file 
  79.  fi 
  80. fi 
  81. done 


4  检查mysql 主从状态

  1. cat chk_mysql_replicate.sh
  2. #!/bin/bash 
  3. # 
  4. #check the mysql replicate 
  5. # 
  6. #/usr/local/mysql/bin/mysql -uroot -pdongnan -e 'show slave status\G' -ss | awk '{print $2}' | head -n 13 | tail -n2 
  7. #Yes 
  8. #Yes 
  9. # 
  10. # 
  11. #variables 
  12. ssh=/usr/bin/ssh 
  13. let dflimit=90 
  14. sh_dir=/root/xianshang_sh/ 
  15. crondir=${sh_dir}crontab 
  16. source ${sh_dir}CONFIG 
  17. HOSTS="$DB_SLAVE_HOSTS" 
  18. #main 
  19. for HOST in $HOSTS;do 
  20.  $ssh root@$HOST "/usr/local/mysql/bin/mysql -uroot -pdongnan -e 'show slave status\G' -ss" | awk '{print $2}' | head -n 13 | tail -n2 >"${crondir}/log/chk_mysql_replicate.log" 
  21.  YN="" 
  22. # 
  23.  while read line;do 
  24.  YN="$YN $line" 
  25.  done < "${crondir}/log/chk_mysql_replicate.log" 
  26. # 
  27.  if [ "$YN" == " Yes Yes" ];then 
  28.  #echo "$HOST Slave is running!" 
  29.  if [ -f "${crondir}/log/$HOST.mysql" ];then 
  30.  #for mobile in $MOBILES;do 
  31.  #echo ""$HOST"."$i" replicate ok" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  32.  #done 
  33.  echo "$HOST replicate ok" | mail -s "$HOST replicate ok" $MAILS 
  34.  rm -f "${crondir}/log/$HOST.mysql" 
  35.  fi 
  36. # 
  37.  else 
  38.  #echo "$HOST Slave is not running!" 
  39.  if [ ! -f "${crondir}/log/$HOST.mysql" ];then 
  40.  #for mobile in $MOBILES;do 
  41.  #echo ""$HOST"."$i" replicate error" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  42.  #done 
  43.  echo "$HOST replicate error" | mail -s "$HOST replicate error" $MAILS 
  44.  echo "replicate error" >"${crondir}/log/$HOST.mysql" 
  45.  fi 
  46.  fi 
  47. # 
  48. done  


5 检查磁盘

  1. cat chk_df.sh 
  2. #!/bin/bash 
  3. # 
  4. #check the disk usage via ssh 
  5. #variables 
  6. ssh=/usr/bin/ssh 
  7. let dflimit=90 
  8. sh_dir=/root/xianshang_sh/ 
  9. crondir=${sh_dir}crontab 
  10. source ${sh_dir}CONFIG 
  11. host="$PHYSICAL_HOSTS $LINUX_WEB_HOSTS $DB_SLAVE_HOSTS" 
  12. #main 
  13. #执行ssh 命令 
  14. for HOST in $host ;do 
  15.  flag_disk_file=$crondir/log/"$HOST".disk 
  16.  log=$crondir/log/disk_error.log 
  17.  capacity=$($ssh root@$HOST "df" | grep "/dev/" | sed 's/\%//' | awk '{print $5}') 
  18.  let flags=0 
  19. #判断ssh命令返回结果 
  20.  for used in $capacity ;do 
  21.  if [ $used -ge $dflimit ];then 
  22.  let flags=1 
  23.  break 
  24.  fi 
  25.  done 
  26. #如果磁盘超过限制,则发送报警邮件 
  27.  if [ "$flags" -eq "1" -a ! -f "$flag_disk_file" ];then 
  28.  #for mobile in "$MOBILES";do 
  29.  #echo "$HOST disk will full" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  30.  #done 
  31.  echo "$HOST disk will full" | mail -s "$HOST disk will full" $MAILS 
  32.  date +'%F %T' >>$log 
  33.  echo "$HOST disk will full" >> $log 
  34.  echo "disk_error" >$flag_disk_file 
  35.  fi 
  36. #如果磁盘正常,则发邮件解除报警邮件 
  37.  if [ "$flags" -eq "0" -a -f "$flag_disk_file" ];then 
  38.  for mobile in "$MOBILES";do 
  39.  echo "$HOST disk ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  40.  done 
  41.  echo "$HOST disk ok" | mail -s "$HOST disk ok" $MAILS 
  42.  date +'%F %T' >>$log 
  43.  echo "$HOST disk ok" >> $log 
  44.  rm -f $flag_disk_file 
  45.  fi 
  46. done 


6 检查系统负载

  1. cat chk_load.sh 
  2. #!/bin/bash 
  3. # 
  4. #check the system load through ssh 
  5. #variables 
  6. ssh=/usr/bin/ssh 
  7. let loadlimit=5 
  8. sh_dir=/root/xianshang_sh/ 
  9. crondir=${sh_dir}crontab 
  10. log=${crondir}/log/system_load.log 
  11. source ${sh_dir}CONFIG 
  12. host="$PHYSICAL_HOSTS $LINUX_WEB_HOSTS $DB_SLAVE_HOSTS" 
  13. #main 
  14. #执行ssh 命令 
  15. for HOST in $host ;do 
  16.  LOAD=$($ssh root@$HOST "/bin/cat /proc/loadavg" | awk '{print $1}' | awk -F. '{print $1}') 
  17.  if [ -z "$LOAD" ];then 
  18.  echo "$HOST is null" 
  19.  continue 
  20.  fi 
  21.  #判断ssh命令返回结果 
  22.  if [ "$LOAD" -lt "$loadlimit" ];then 
  23.  #echo "$HOST load is OK!" 
  24.  #如果找到load文件,则发送解除报警邮件 
  25.  if [ -f $crondir/log/"$HOST".load ];then 
  26.  #for mobile in $MOBILES;do 
  27.  # echo "$HOST load ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  28.  #done 
  29.  echo "$HOST load ok" | mail -s "$HOST load ok" $MAILS 
  30.  #删除load文件 
  31.  rm -f $crondir/log/"$HOST".load 
  32.  date +'%F %T' >>$log 
  33.  echo "$HOST load ok" >> $log 
  34.  fi 
  35.  else 
  36.  #echo "$HOST is overload!" 
  37.  #不能找到load文件,则发送报警邮件 
  38.  if [ ! -f $crondir/log/"$HOST".load ];then 
  39.  #for mobile in $MOBILES;do 
  40.  # echo ""$HOST" overload"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  41.  #done 
  42.  echo "$HOST overload" | mail -s "$HOST overload" $MAILS 
  43.  #生成load文件 
  44.  echo "overload" >$crondir/log/"$HOST".load 
  45.  date +'%F %T' >>$log 
  46.  echo "$HOST overload" >> $log 
  47.  fi 
  48.  fi 
  49. done 


7 检查web server

  1. cat chk_web.sh 
  2. #!/bin/bash 
  3. # 
  4. #check the http 80 port via ssh 
  5. #variables 
  6. curl=/usr/bin/curl 
  7. usleep=/bin/usleep 
  8. sh_dir=/root/xianshang_sh/ 
  9. crondir=${sh_dir}crontab 
  10. source ${sh_dir}CONFIG 
  11. host="$LINUX_WEB_HOSTS $WIN_WEB_HOSTS" 
  12. #main 
  13. for HOST in $host ;do 
  14. flag_apache_file=$crondir/log/"$HOST".web 
  15. log=$crondir/log/apache_error.log 
  16. let n=1 
  17. # 
  18.  while [ "$n" -lt "5" ];do 
  19. #if wget http://"$HOST"/check.html -O "$LOG_DIR/$HOST".html --timeout=3 --tries=2 -o $log;then 
  20.  if $curl -IL -m 2 http://"$HOST"/check.html 2>&1 | grep '200' > /dev/null;then 
  21.  if [ -f $flag_apache_file ];then 
  22.  #for mobile in $MOBILES ;do 
  23.  #echo "$HOST 80 port ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  24.  #done 
  25.  echo "$HOST 80 port ok" | mail -s "$HOST 80 port ok" $MAILS 
  26.  rm -f $flag_apache_file 
  27.  fi 
  28.  break 
  29.  else 
  30.  let n++ 
  31.  $usleep 300000 
  32.  fi 
  33.  done 
  34. # 
  35.  if [ "$n" -eq "5" -a ! -f $flag_apache_file ];then 
  36.  #for mobile in $MOBILES ;do 
  37.  #echo "$HOST 80 port error"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  38.  #done 
  39.  echo "$HOST 80 port error" | mail -s "$HOST 80 port error" $MAILS 
  40.  date +'%F %T' >>$log 
  41.  echo "$HOST apache error" >> $log 
  42.  echo "apache_error" >$flag_apache_file 
  43.  fi 
  44. done 

#
#


本文出自 “dongnan” 博客




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论