LINUX内存监控

 #!/bin/bash    
    #  
    # 监控内存使用状态 以便做出响应,可以添加到/etc/rc.local中作为守护进程脚本运行    
    #  
    # free#              total       used       free     shared    buffers     cached  
    # Mem:       2074716     702972    1371744          0     123612     478028  
    # -/+ buffers/cache:     101332    1973384  
    # Swap:      4088532          0    4088532   
    #  
    MINRATIO="0.05" 
    #while true  
    while :  
    do  
        MemTotal=`free|grep "Mem"|awk '{ print $2 }'`  
        MemFree=`free|grep "Mem"|awk '{ print $4 }'`  
        Result=`echo | awk '{ print "'$MemFree'" / "'$MemTotal'" }'`  
        RetVal=`awk 'BEGIN { print ("'$Result'" < "'$MINRATIO'"); }'`  
     
        if [ ${RetVal} -eq 1 ]; then  
        #    echo "Restart Apache"  
            /usr/local/apache/bin/apachectl restart  
        fi  
        sleep 60  
    done 

注意:awk中变量的使用
一:”‘$var'”
这种写法大家无需改变用’括起awk程序的习惯,是老外常用的写法.如:

    var="test"  
    awk 'BEGIN{print "'$var'"}' 

这种写法其实际是双括号变为单括号的常量,传递给了awk.
如果var中含空格,为了shell不把空格作为分格符,便应该如下使用:

    var="this is a test"  
    awk 'BEGIN{print "'"$var"'"}' 

二:'”$var”‘
这种写法与上一种类似.如果变量含空格,则变为'””$var””‘较为可靠.
三.把括起awk程序的”变为””,使用”$var”
如:

    $var="this is a test"  
    awk 'BEGIN{print "$var"}"  

这是因为在””里$是特殊字符,而在”里$是普通字符.
四:export 变量,使用ENVIRON[“var”]形式,
如:

    $var="this is a test";export $var  
    awk 'BEGIN{print ENVIRON["var"]}'  

五:当然也可以使用-v选项
如:

    $var="this is a test" 
    awk -vnvar="$var" '{print nvar}' 

这样便把系统变量定义成了awk变量.

发表评论