2017-05-09 41 views
2

我想知道如果任何人都可以使用的原因,這有助於無法觸發正確CPU監控腳本不正確地觸發

HOSTNAME=`hostname -s` 
LOAD=25.00 
CAT=/bin/cat 
MAILFILE=/home/jboss/monitor.mail 
MAILER=/bin/mail 
mailto="[email protected]" 
CPU_LOAD=`sar -P ALL 1 10 |grep 'Average.*all' |awk -F" " '{print 100.0 -$NF}'` 
if [[ $CPU_LOAD > $LOAD ]]; 
then 
PROC=`ps -eo pcpu,pid -o comm= | sort -k1 -n -r | head -1` 
echo -e "Please check processes on ${HOSTNAME} the value of cpu load is $CPU_LOAD%. 
Highest process is: $PROC" > $MAILFILE 
$CAT $MAILFILE | $MAILER -s "CPU Load is on ${HOSTNAME} is $CPU_LOAD %" $mailto 
fi 

這似乎爲特區和PS但是我仍然得到警報正常工作通過電子郵件發送CPU負載爲3.18%。除非我失去了一些東西,否則它不應該觸發,除非負載大於25%。

看來雖然它更多的是如果負載大於2.5%的任何建議嗎?

謝謝

回答

0

猛砸只處理整數,因此用更高的精度,你可以做這樣的事情:

cpu_limit=25 
# read the 5min load-average straight from the special file on /proc 
read -r _ load_avg _ </proc/loadavg 
# multiply by 100 for precision 
load_avg=$(bc <<<"scale=0; $load_avg * 100/1") 
# compare numbers with (()) instead 
if ((load_avg > cpu_limit)); then 
    ... 
fi 
0

試試這個代碼 - (測試 - 工作的罰款)

$ cat f.sh 
HOSTNAME=$(hostname -s) 
LOAD=25.00 
MAILFILE=$HOME/a.txt 
MAILER=/bin/mailx 
mailto="[email protected]" 
CPU_LOAD=$(sar -P ALL 1 10 |grep 'Average.*all' |awk -F" " '{print 100.0 -$NF}') 
if [[ $CPU_LOAD > $LOAD ]];then 
{ 
PROC=$(ps -eo pcpu,pid -o comm= | sort -k1 -n -r | head -1) 
echo -e "Please check processes on ${HOSTNAME} the value of cpu load is $CPU_LOAD%. 
Highest process is: $PROC" > $MAILFILE 
cat $MAILFILE | $MAILER -s "CPU Load is on ${HOSTNAME} is $CPU_LOAD %" $mailto 
} 
fi 
+0

所以我嘗試了這個,它似乎也做了同樣的事情。在LOAD = 25.00的情況下仍收到25%以下的電子郵件。 請檢查上的進程,cpu負載的值爲4.88%。 最高的過程是:1.1 8499 java –

+0

經過多一點測試後,似乎將負載更改爲2500而不是25.00,似乎將警報創建爲25%而不是2.5% –