[转帖]shell-脚本集合2(monitor)_VMware, Unix及操作系统讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  VMware, Unix及操作系统讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 4196 | 回复: 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. #Use the ping command to check network 
  4. #$ ping -f -c 10 10.0.100.1 
  5. #PING 10.0.100.1 (10.0.100.1) 56(84) bytes of data. 
  6. #.........E 
  7. #--- 10.0.100.1 ping statistics --- 
  8. #10 packets transmitted, 0 received, +3 errors, 100% packet loss, time 120ms 
  9. #, pipe 3 
  10. #$ ping -f -c 10 10.0.100.71 
  11. #PING 10.0.100.71 (10.0.100.71) 56(84) bytes of data. 
  12. #--- 10.0.100.71 ping statistics --- 
  13. #10 packets transmitted, 10 received, 0% packet loss, time 0ms 
  14. #rtt min/avg/max/mdev = 0.003/0.009/0.056/0.015 ms, ipg/ewma 0.029/0.019 ms 
  15. #$ echo $? 
  16. #1 #返回值1 
  17. #variables 
  18. ping=/bin/ping 
  19. DELAY_LIMIT=100 
  20. LOSS_LIMIT=20 
  21. sh_dir=/root/xianshang_sh/ 
  22. crondir=${sh_dir}crontab 
  23. source ${sh_dir}CONFIG 
  24. hosts="$ALLHOSTS" 
  25. #main 
  26. #每个ip 
  27. for HOST in $hosts ;do 
  28. flag_ping_file="$crondir/log/$HOST.ping" 
  29. flag_ping_fatal="$crondir/log/$HOST.ping.fatal" 
  30. error_log="$crondir/log/ping_error.log" 
  31. #返回值0,定义delay 与 loss 变量 
  32. if $ping -f -c 50 $HOST >$crondir/log/ping.log;then 
  33.  grep "rtt min" $crondir/log/ping.log >$crondir/log/ping.delay 
  34.  grep "packet loss" $crondir/log/ping.log >$crondir/log/ping.loss 
  35.  delay=`awk -F= '{print $2}' $crondir/log/ping.delay | awk -F/ '{print $2}'| awk -F. '{print $1}'` 
  36.  loss=`awk '{print $6}' $crondir/log/ping.loss | awk -F% '{print $1}'` 
  37. #判断delay 或者loss 大于规定限制,则发送报警邮件 
  38.  if [ "$delay" -ge "$DELAY_LIMIT" -o "$loss" -ge "$LOSS_LIMIT" ];then 
  39.  if [ ! -f $flag_ping_file ];then 
  40.  #for mobile in $MOBILES;do 
  41.  #echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  42.  #done 
  43.  echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | mail -s "$HOST delay" $MAILS 
  44.  date +'%F %T' >>$error_log 
  45.  cat $crondir/log/ping.log >>$error_log 
  46. #生成用于判断的flag文件 
  47.  echo "$HOST network error" >$flag_ping_file 
  48.  fi 
  49.  fi 
  50. #判断delay 或者loss 小于规定限制,则发送解除报警邮件 
  51.  if [ "$delay" -lt "$DELAY_LIMIT" -a "$loss" -lt "$LOSS_LIMIT" -a -f $flag_ping_file ];then 
  52.  echo "$HOST network ok" | mail -s "$HOST nk ok" $MAILS 
  53.  rm -f $flag_ping_file 
  54.  if [ -f $flag_ping_fatal ];then 
  55.  #for mobile in $MOBILES;do 
  56.  #echo "$HOST network ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  57.  #done 
  58. #删除用于判断的flag文件 
  59.  rm -f $flag_ping_fatal 
  60.  fi 
  61.  fi 
  62. else 
  63. #返回值1,则直接判断为失败,发送报警邮件 
  64.  if [ ! -f $flag_ping_fatal ];then 
  65.  #for mobile in $MOBILES;do 
  66.  #echo "Monitor to $HOST fatal;100% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  67.  #done 
  68.  echo "Monitor to $HOST fatal;100% packet loss" | mail -s "$HOST loss" $MAILS 
  69.  date +'%F %T' >>$error_log 
  70.  cat $crondir/log/ping.log >>$error_log 
  71.  echo "$HOST network fatal" >$flag_ping_fatal 
  72.  echo "$HOST network error" >$flag_ping_file 
  73.  fi 
  74. fi 
  75. done 


4  检查mysql 主从状态

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


5 检查磁盘

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


6 检查系统负载

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


7 检查web server

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

#
#


本文出自 “dongnan” 博客




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