CPU监控脚本不正确地触发
问题描述:
我想知道如果任何人都可以使用的原因,这有助于无法触发正确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%的任何建议吗?
谢谢
答
猛砸只处理整数,因此用更高的精度,你可以做这样的事情:
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
答
试试这个代码 - (测试 - 工作的罚款)
$ 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
所以我尝试了这个,它似乎也做了同样的事情。在LOAD = 25.00的情况下仍收到25%以下的电子邮件。 请检查上的进程,cpu负载的值为4.88%。 最高的过程是:1.1 8499 java –
经过多一点测试后,似乎将负载更改为2500而不是25.00,似乎将警报创建为25%而不是2.5% –