shell腳本監控內嵌linux系統業務、CPU、內存等

wdey 9年前發布 | 9K 次閱讀 Shell

定制板卡中bash無法使用,使用標準sh完成對系統及業務監控

#! /bin/sh

Process_Name="/guard /aps /sa /zyguard"

Process_Name="/mp /mcu"

獲取主機IP地址

ip=ifconfig eth0 |grep "inet addr"| cut -f 2 -d ":"|cut -f 1 -d " " gstr="/guard" space=" " First_Process=""

獲取初始業務進程號

for i in $Process_Name do if [[ $i == $gstr ]] then Bf_Process=ps |grep $i|grep -v grep|grep -v '/bin/bash'|awk '{print $1}' First_Process=$First_Process$i":"$Bf_Process$space else Bf_Process=ps |grep $i|grep -v grep|awk '{print $1}' First_Process=$First_Process$i":"$Bf_Process$space fi done

while true do For_num=1 sleep 3 Second_Process=""

#第二次獲取業務進程號
for i in $Process_Name
do
    if [[ $i == $gstr ]]
    then
        Bs_Process=`ps |grep $i|grep -v grep|grep -v '/bin/bash'|awk '{print $1}'`
        Second_Process=$Second_Process$i":"$Bs_Process$space
    else
        Bs_Process=`ps |grep $i|grep -v grep|awk '{print $1}'`
        Second_Process=$Second_Process$i":"$Bs_Process$space
    fi
done
echo "First_Process:"$First_Process
echo "Second_Process:"$Second_Process
#查看所有業務進程有無變化,有變化輸出到日志文件
for j in $Process_Name
do
    echo $j
    One_f_Process=`echo $First_Process|awk -v t="${For_num}" '{print $t}'`
    One_s_Process=`echo $Second_Process|awk -v t="${For_num}" '{print $t}'`
    For_num=$((For_num+1))
    echo "One_f_Process:"$One_f_Process
    echo "One_s_Process:"$One_s_Process
    if [[ "$One_f_Process" != "$One_s_Process" ]]
    then
        Time_Now=`date`
        echo $Time_Now
        echo $j
        echo $One_s_Process
        echo $One_f_Process
        echo -e $Time_Now"\t"$j"\tCollapse\tThe new process:"$One_s_Process"\t\tThe old process:"$One_f_Process >> /usr/tmp/$ip'_collapse'.txt
    fi
done
#獲取業務進程號
First_Process=""
for i in $Process_Name
do
    if [[ $i == $gstr ]]
    then
        Bf_Process=`ps |grep $i|grep -v grep|grep -v '/bin/bash'|awk '{print $1}'`
        First_Process=$First_Process$i":"$Bf_Process$space
    else
        Bf_Process=`ps |grep $i|grep -v grep|awk '{print $1}'`
        First_Process=$First_Process$i":"$Bf_Process$space
    fi
done

#系統內存使用率監控
Memory_Use_Rate=`free | grep Mem | awk '{printf"%d",$3/$2*100}'`
if [ 80 -le $Memory_Use_Rate ]
then
    Time_Now=`date`
    echo -e $Time_Now"\tSystm Memory\tMemory_Use_Rate\tAt present the use value:"$Memory_Use_Rate"%\tThreshold:80%" >> /usr/tmp/$ip'_alarm'.txt
fi

#系統CPU剩余率監控
Cpu_Residual_Rate=`mpstat|grep all|awk '{printf"%d",$11}'`
echo $Cpu_Residual_Rate
if [ $Cpu_Residual_Rate -le 20 ]
then
    Time_Now=`date`
    echo $Time_Now
    echo -e $Time_Now"\tSystm Cpu\tCpu_Residual_Rate(%idle)\tAt present the use value:"$Cpu_Residual_Rate"%\tThreshold:20%" >> /usr/tmp/$ip'_alarm'.txt
fi 

#業務內存使用率監控
System_Memory=`free | grep Mem | awk '{printf"%d",$2/1024}'`
for k in $Process_Name
do
    if [[ $k == $gstr ]]
    then
        Process_Memory_Use=`ps |grep $k|grep -v grep|grep -v '/bin/bash'|awk '{print $3}'`
        var_length=${#Process_Memory_Use}
        var_Position=`expr $var_length - 1`
        m=${Process_Memory_Use:$var_Position:1}
        if [[ $m == "m" ]]
        then
            Pro_Mem_Use=${Process_Memory_Use:0:$var_Position}   
        else
            Pro_Mem_Use=`expr $Process_Memory_Use / 1024`
        fi
        System_Memory_Threshold=`free | grep Mem | awk '{printf"%d",$2/1024*0.8}'`
        if [[ $Pro_Mem_Use  -ge $System_Memory_Threshold ]]
        then
            Time_Now=`date`
            echo -e $Time_Now"\t"$k"\tProcess_Memory_Use\tAt present the use value:"$Pro_Mem_Use"Mb\tThreshold:"$System_Memory_Threshold"Mb" >> /usr/tmp/$ip'_alarm'.txt
        fi
    else
        Process_Memory_Use=`ps |grep $k|grep -v grep|awk '{print $3}'`
        var_length=${#Process_Memory_Use}
        var_Position=`expr $var_length - 1`
        m=${Process_Memory_Use:$var_Position:1}
        if [[ $m == "m" ]]
        then
            Pro_Mem_Use=${Process_Memory_Use:0:$var_Position}   
        else
            Pro_Mem_Use=`expr $Process_Memory_Use / 1024`
        fi
        System_Memory_Threshold=`free | grep Mem | awk '{printf"%d",$2/1024*0.8}'`
        if [[ $Pro_Mem_Use  -ge $System_Memory_Threshold ]]
        then
            Time_Now=`date`
            echo -e $Time_Now"\t"$k"\tProcess_Memory_Use\tAt present the use value:"$Pro_Mem_Use"Mb\tThreshold:"$System_Memory_Threshold"Mb" >> /usr/tmp/$ip'_alarm'.txt
        fi
    fi
done

done</pre>

 本文由用戶 wdey 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!