检测os的脚本

目的:学了shell语言后,根据已学编写一个shell的脚本实现检测部分系统参数实现邮件告警,

(之前刚刚学习写的不怎么完善和实用!)


[root@cml scripts]# cat os.monitor.sh 

#!/bin/bash

###########

#name=linux查看系统资源脚本

#auth=cml

#time:2015

###########


DATE=`date "+%F %H:%M:%S"`

HOST=`hostname`


###########


echo "check:$DATE"


check_yum(){

        yum install -y sysstat

        yum install -y iftop

        yum install -y lsof


}


check_mail(){

        rpm -qa | grep mailx-12.4-8.el6_6.x86_64

        mail=`echo $?`

        if [ $mail -eq 0 ]; then

                echo "mail is installed"

        else

                yum install -y mailx

        fi

service postfix status

        mail=`echo $?`

        if [ $mail -eq 0 ]; then

                echo "postfix is running!"

        else

                echo "postfix not running"

                service postfix start

                echo "postfix successfully runnig"

        fi

        echo -e "\033[32m=========check_mail is ok========\033[0m"  

                            ##只是为了好看分隔

}


check_sys(){

#       echo "检查主机名,系统参数!"

        echo -n "HOSTNAME:"

        echo $HOST

        echo -n "系统版本:"

        cat /etc/issue

        echo -n "系统的参数:"

        cat /proc/version

        echo -e "\033[32m=========check_sys is ok========\033[0m"

}


check_CPU(){

#       echo "检查CPU,LOAD,WA,IDEL情况!"

        echo -n "CPU内核:"

        cpu=`cat /proc/cpuinfo | grep processor | wc -l`

        echo $cpu

        echo -n "load:"

        load1=`w | awk 'NR==1 {print $10}' | awk -F '.' '{print $1}'`

        load2=w | awk 'NR==1 {print $10}'

        echo $load2

        if [ $load1 -lt $cpu ];  then

                echo "send_mail to ********@qq.com"

                echo "your cpu is normal! cpu=$cpu load balance=$load2  time:$DATE" | mail -s "check your CPU" ********@qq.com

        else

                echo "your load<cpu load=$load cpu=$cpu $DATE"


        fi

        echo -e "\033[32m=========check_CPU is ok========\033[0m"

}


check_mem(){

#       echo "检查内存使用情况!"

free=`free -m | awk 'NR==2 {print $4}'`

        cache=`free -m | awk 'NR==2 {print $7}'`

        echo -n "内存使用情况:"

                mem=`echo $[free+cache]`

        echo $mem

                if [ $mem -lt 1000 ]; then

                        echo "send_mail to ********@qq.com"

                        echo "your mem is normal time:$DATE" | mail -s "check your mem " ********@qq.com

                else

                        echo "your mem:$mem>1000 is abnormality time:$DATE"

                fi

        echo -e "\033[32m=========check_mem is ok========\033[0m"

}


check_network(){

#       echo "检查网卡eth0的流量!"

#        iftop -t >> /tmp/network

echo -n "接收端流量:" 

# cat /tmp/network | grep send |  awk 'NR==1 {print $4}'

       ifconfig eth0 | awk 'NR==8 {print $3}' | awk -F '(' '{print $2}'

        echo -n "发送端流量:"

# cat /tmp/network | grep receive | awk 'NR==1 {print $4}'

       ifconfig eth0 | awk 'NR==8 {print $7}' | awk -F '(' '{print $2}'

        echo -e "\033[32m=========check_network is ok========\033[0m"

}

check_TCP(){

#       echo "检查TCP连接状态!"

        echo -n "TCP连接状态:"

        netstat -an | awk '/^tcp/{a[$NF]++}END{for (i in a)print i,a[i]}'

        listen=`netstat -an | awk '/^tcp/{a[$NF]++}END{for (i in a)print i,a[i]}' | awk 'NR==2 {print $2}'`

        if [ $listen -gt 7 ]; then

                echo "send_mail to ********@qq.com "

                echo "your connection is normal! time:$DATE" | mail -s "check your TCP " ********@qq.com

        else

                echo "your now-listen>Normal-listen now-listen=$listen $DATE"

        fi

        echo -e "\033[32m=========check_TCP is ok========\033[0m"

}


check_DISK(){

#       echo "检查磁盘的使用情况!"

        echo  "/分区的使用百分比:"

        root=`df -h | awk 'NR==3{print $4}' | awk -F "%" '{print $1}'`

        echo $root

        echo  "INNODE使用百分比:"

        df -i | awk 'NR==3 {print $4}'

        if [ $root -lt 80 ]; then

                echo "send_mail to ********@qq.com"

                echo "your disk:/ is normal! time:$DATE " | mail -s "check your DISK" ********@qq.com

        else

                echo "your disk:/ greater than 80% /:$root time:$DATE"

        fi

       echo -e "\033[32m=========check_DISK is ok========\033[0m"

}




monitor2(){

check_sys

check_CPU

check_mem

check_network

check_TCP

check_DISK

}


monitor2 >> /tmp/$(hostname).txt