Bash CPU监视脚本未正确触发

Bash CPU监视脚本未正确触发,bash,awk,load,cpu,sar,Bash,Awk,Load,Cpu,Sar,我想知道是否有人能帮忙解释一下这不能正确触发的原因 HOSTNAME=`hostname -s` LOAD=25.00 CAT=/bin/cat MAILFILE=/home/jboss/monitor.mail MAILER=/bin/mail mailto="bob@bob.bob" CPU_LOAD=`sar -P ALL 1 10 |grep 'Average.*all' |awk -F" " '{print 100.0 -$NF}'` if [[ $CPU_LOAD > $LOA

我想知道是否有人能帮忙解释一下这不能正确触发的原因

HOSTNAME=`hostname -s`
LOAD=25.00
CAT=/bin/cat
MAILFILE=/home/jboss/monitor.mail
MAILER=/bin/mail
mailto="bob@bob.bob"
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
这似乎是正常工作的sar和ps,但我仍然收到电子邮件提醒的事情,如CPU负载是3.18%。除非我遗漏了一些东西,否则它不会触发,除非负载大于25%

如果负载大于2.5%,那么它看起来更有用。有什么建议吗


谢谢

Bash只处理整数,因此要使用更高的精度,可以执行以下操作:

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
cpu\u限制=25
#直接从/proc上的特殊文件读取5分钟平均负载
read-r\uu加载平均值\up>尝试此代码-(已测试-工作正常)

而不是使用:

if [[ $CPU_LOAD > $LOAD ]];then
你必须使用

if [[ $CPU_LOAD -gt $LOAD ]]; then

所以我尝试了这个,它似乎也做了同样的事情。当负载=25.00时,仍收到低于25%的电子邮件,请检查cpu负载值为4.88%的进程。最高的流程是:1.1 8499 Java在做了更多的测试之后,似乎将负载更改为2500而不是25.00,似乎在以25%而不是2.5%的速度创建警报
if [[ $CPU_LOAD -gt $LOAD ]]; then