实时监控系统CPU,硬盘情况的shell脚本
 
能实现实时系统监控,当检测到情况后,每隔2小时在发送一封信件给SA
#!/bin/bash
###Define the safe number###
maxcpu=0
maxdisk=10
maxload=0
diskold=0
cpuold=0
loadold=0
#####################################
if [  -d mdisk ]
then
rm -rf  /root/mdisk
fi
mkdir /root/mdisk
while [ 1 ]
do
flag=0
top -b1 -n1 > /root/mdisk/top.info
m=`date +%m-%d:%H:%M`
log=/root/mdisk/diskinfo.txt
IP=`/sbin/ifconfig  | grep inet | awk '{print $2 }' | awk -F ":" '{print $2}'`
df -h | sed 's/ /1/' | awk {'print $5$6'} > $log
max=$(awk -F"%" '{print $1}' /root/mdisk/diskinfo.txt | sort -n | tail -1)
        if [ "$max" -ge "$maxdisk" ] ;then
        if [ $diskold -eq 0 ] ;then
        echo "以有超过$maxdisk%的分区使用量,具体如下:" >/root/mdisk/alarm.log
                echo "`df -h`" >> /root/mdisk/alarm.log
                echo "---------------------------------------------------->" >> /root/mdisk/alarm.log
        echo "" >> /root/mdisk/alarm.log
        echo "" >> /root/mdisk/alarm.log
        flag=1
        diskold=$(date +%s)
        else 
                   if [ $((diskold + 7200)) -le $(date +%s) ] ;then 
                flag=1
                                 diskold=$(date +%s)
                   fi
              fi
      else
        diskold=0
        fi
###Check the CPU####################################
cpuinfo=`grep "Cpu(s)" /root/mdisk/top.info|awk '{print $2}'`
cpuinfonumber=` echo $cpuinfo |awk -F "%" '{print $1}'|awk -F "." '{print $1}'`
    if [ ${cpuinfonumber} -ge ${maxcpu} ] ;then
         if [ $cpuold -eq 0 ] ;then
         echo "在$m时CPU占用率达到$cpuinfo,具体如下:" >>/root/mdisk/alarm.log
                   echo  ` top b1 n1 | grep Cpu` >> /root/mdisk/alarm.log
                  echo "---------------------------------------------------->" >> /root/mdisk/alarm.log
         echo "" >> /root/mdisk/alarm.log
             echo "" >> /root/mdisk/alarm.log
         flag=1
                 cpuold=$(date +%s)
           else
                   if [ $((cpuold + 7200)) -le $(date +%s) ] ;then 
                flag=1
                                 cpuold=$(date +%s)
            fi
        fi
    else   
        cpuold=0
    fi
####################################################
########Check the load average###################################
loadavg=`grep "load average:" /root/mdisk/top.info |sed 's/.*load average: //'|awk -F "," '{print $(NF-2)}'`
#loadavgnumber=`grep "load average:" top.info |sed 's/.*load average: //'|awk -F "," '{print $(NF-2)}'|awk -F "." '{print $1}'`
loadavgnumber=`echo $loadavg | awk -F "." '{print $1}'`
        if [ ${loadavgnumber} -ge ${maxload} ] ;then
            if [ $loadold -eq 0 ] ;then
                    echo "5分钟之前系统负载为$loadavg%" >> /root/mdisk/alarm.log
                echo `top b1 n1 | grep load` >> /root/mdisk/alarm.log
                             echo "---------------------------------------------------->" >> /root/mdisk/alarm.log
                flag=1
                loadold=$(date +%s)
            else
                if [ $((loadold + 7200)) -le $(date +%s) ] ;then 
                    flag=1
                               loadold=$(date +%s)
                       fi
                  fi
           else 
              loadold=0
           fi
    if [ $flag -eq 1 ] ;then
        /bin/mail -s "$IP系统状况!" chinasj@163.com < /root/mdisk/alarm.log
    fi
    sleep 1
done