shell-脚本集合2


shell-脚本集合2
2012年01月16日
  
  版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。 
  shell-脚本集合 shell-脚本集合2
  21 监控之检查磁盘 $ cat chk_df.sh  
  #!/bin/bash 
  # 
  #check the disk usage via ssh 
  #variables 
  let dflimit=90 
  crondir="crontab" 
  source CONFIG 
  #main 
  #执行ssh 命令 
  for HOST in $ALLHOSTS ;do 
  flag_disk_file=$crondir/log/"$HOST".disk 
  log=$crondir/log/disk_error.log 
  capacity=$(ssh root@$HOST "df" | grep "/dev/" | sed 's/\%//' | awk '{print $5}') 
  let flags=0 
  #判断ssh命令返回结果 
  for used in $capacity ;do 
  if [ $used -ge $dflimit  ];then 
  let flags=1 
  break 
  fi 
  done 
  #如果磁盘超过限制,则发送报警邮件 
  if [ "$flags" -eq "1" -a ! -f "$flag_disk_file" ];then 
  #for mobile in "$MOBILES";do 
  #echo "$HOST disk will full" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  #done 
  echo "$HOST disk will full" | mail -s "$HOST disk will full" $MAILS 
  date +'%F %T' >>$log 
  echo "$HOST disk will full" >> $log 
  echo "disk_error" >$flag_disk_file 
  fi 
  #如果磁盘正常,则发邮件解除报警邮件 
  if [ "$flags" -eq "0" -a  -f "$flag_disk_file" ];then 
  for mobile in "$MOBILES";do 
  echo "$HOST disk ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  done 
  echo "$HOST disk ok" | mail -s "$HOST disk ok" $MAILS 
  date +'%F %T' >>$log 
  echo "$HOST disk ok" >> $log 
  rm -f $flag_disk_file 
  fi  done 
  22 监控之检查系统负载 $ cat chk_load.sh  
  #!/bin/bash 
  # 
  #check the system load through ssh 
  #variables 
  let loadlimit=3 
  sh_dir=/root/sh/ 
  crondir=${sh_dir}crontab 
  log=${crondir}/log/system_load.log 
  source ${sh_dir}/CONFIG 
  #main 
  #执行ssh 命令 
  for HOST in $ALLHOSTS ;do 
  LOAD=$(ssh root@$HOST "/bin/cat /proc/loadavg" | awk '{print $1}' | awk -F. '{print $1}') 
  if [ -z "$LOAD" ];then 
  echo "$HOST is null" 
  continue 
  fi 
  #判断ssh命令返回结果 
  if [ "$LOAD" -lt "$loadlimit" ];then 
  #echo "$HOST load is OK!" 
  #如果找到load文件,则发送解除报警邮件 
  if [ -f $crondir/log/"$HOST".load ];then 
  #for mobile in $MOBILES;do 
  #    echo "$HOST load ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  #done 
  echo "$HOST load ok" | mail -s "$HOST load ok" $MAILS 
  #删除load文件 
  rm -f $crondir/log/"$HOST".load 
  date +'%F %T' >>$log 
  echo "$HOST load ok" >> $log 
  fi 
  else 
  #echo "$HOST is overload!" 
  #不能找到load文件,则发送报警邮件 
  if [ ! -f $crondir/log/"$HOST".load ];then 
  #for mobile in $MOBILES;do 
  #    echo ""$HOST" overload"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  #done 
  echo "$HOST overload" | mail -s "$HOST overload" $MAILS 
  #生成load文件 
  echo "overload" >$crondir/log/"$HOST".load 
  date +'%F %T' >>$log 
  echo "$HOST overload" >> $log 
  fi 
  fi  done 
  26 监控之检查网络(ping) $ cat chk_ping.sh  
  #!/bin/bash 
  # 
  #Use the ping command to check network 
  # 
  #$ ping -f -c 10 10.0.100.1 
  #PING 10.0.100.1 (10.0.100.1) 56(84) bytes of data. 
  #.........E 
  #--- 10.0.100.1 ping statistics --- 
  #10 packets transmitted, 0 received, +3 errors, 100% packet loss, time 120ms 
  #, pipe 3 
  #$ ping -f -c 10 10.0.100.71 
  #PING 10.0.100.71 (10.0.100.71) 56(84) bytes of data. 
  #  
  #--- 10.0.100.71 ping statistics --- 
  #10 packets transmitted, 10 received, 0% packet loss, time 0ms 
  #rtt min/avg/max/mdev = 0.003/0.009/0.056/0.015 ms, ipg/ewma 0.029/0.019 ms 
  # 
  #$ echo $? 
  #1                    #返回值1  
  #     
  #variables 
  sh_dir=/root/sh/ 
  crondir=${sh_dir}crontab 
  source ${sh_dir}/CONFIG 
  DELAY_LIMIT=100 
  LOSS_LIMIT=20 
  HOSTS="$ALLHOSTS $WEBHOSTS"      #main 
  #每个ip  
  for HOST in $HOSTS ;do 
  flag_ping_file="$crondir/log/$HOST.ping" 
  flag_ping_fatal="$crondir/log/$HOST.ping.fatal" 
  error_log="$crondir/log/ping_error.log" 
  #返回值0,定义delay 与 loss 变量 
  if ping -f -c 50 $HOST >$crondir/log/ping.log;then 
  grep "rtt min" $crondir/log/ping.log >$crondir/log/ping.delay 
  grep "packet loss" $crondir/log/ping.log >$crondir/log/ping.loss 
  delay=`awk -F= '{print $2}' $crondir/log/ping.delay | awk -F/ '{print $2}'| awk -F. '{print $1}'` 
  loss=`awk '{print $6}' $crondir/log/ping.loss | awk -F% '{print $1}'` 
  #判断delay 或者loss 大于规定限制,则发送报警邮件 
  if [ "$delay" -ge "$DELAY_LIMIT" -o "$loss" -ge "$LOSS_LIMIT" ];then 
  if [ ! -f $flag_ping_file ];then 
  #for mobile in $MOBILES;do 
  #echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  #done 
  echo "Monitor to $HOST delay $delay'ms;$loss% packet loss" | mail -s "Monitor to $HOST delay $delay'ms;$loss% packet loss" $MAILS 
  date +'%F %T' >>$error_log 
  cat $crondir/log/ping.log >>$error_log 
  #生成用于判断的flag文件 
  echo "$HOST network error" >$flag_ping_file 
  fi 
  fi 
  #判断delay 或者loss 小于规定限制,则发送解除报警邮件 
  if [ "$delay" -lt "$DELAY_LIMIT" -a "$loss" -lt "$LOSS_LIMIT" -a -f $flag_ping_file ];then 
  echo "$HOST network ok" | mail -s "$HOST network ok" $MAILS 
  rm -f $flag_ping_file 
  if [ -f $flag_ping_fatal ];then 
  #for mobile in $MOBILES;do 
  #echo "$HOST network ok"|/usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  #done 
  #删除用于判断的flag文件 
  rm -f $flag_ping_fatal 
  fi 
  fi  #  else 
  #返回值1,则直接判断为失败,发送报警邮件 
  if [ ! -f $flag_ping_fatal ];then 
  #for mobile in $MOBILES;do 
  #echo "Monitor to $HOST fatal;100% packet loss" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  #done 
  echo "Monitor to $HOST fatal;100% packet loss" | mail -s "Monitor to $HOST fatal;100% packet loss" $MAILS 
  date +'%F %T' >>$error_log 
  cat $crondir/log/ping.log >>$error_log 
  echo "$HOST network fatal" >$flag_ping_fatal 
  echo "$HOST network error" >$flag_ping_file 
  fi  fi  done 
  27 监控之检查mysql 主从状态 $ cat chk_mysql_replicate.sh  
  #!/bin/bash 
  # 
  #check the mysql replicate 
  # 
  #/usr/local/mysql/bin/mysql -uroot -pdongnan -e 'show     slave status\G' -ss | awk '{print $2}' | head -n 13 | tail -n2 
  #Yes  #Yes  #  #   
  #variables 
  let dflimit=90 
  sh_dir=/root/sh/ 
  crondir=${sh_dir}crontab 
  source ${sh_dir}/CONFIG 
  HOSTS="$DB_SLAVE_HOSTS"      #main 
  for HOST in $HOSTS;do 
  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" 
  YN=""  # 
  while read line;do 
  YN="$YN $line" 
  #doneerror" | /usr/local/bin/gammu --sendsms TEXT "$mobile" -unicode 
  #done 
  echo "$HOST replicate error" | mail -s "$HOST replicate error" $MAILS 
  echo "replicate error" >"${crondir}/log/$HOST.mysql" 
  fi 
  fi 
  #        
  done 
  本文出自“dongnan” 博客,转载请与作者联系!

猜你喜欢

转载自ftn119bp.iteye.com/blog/1359423
今日推荐