shell脚本之cpu监控

合集下载
相关主题
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

使用的VMware下的redhat6.3系统虚拟机

程序如下:

#!/bin/bash

while true

do

cpu_idle=`vmstat |awk 'NR==3 { print $0 }' |awk '{ printf $(NF-2) }'`

if [ $cpu_idle -lt 20 ]

then

echo "Warning,CPU is going to reach the limit." |mail -s "CPU warning" root@localhost

else

:

fi

sleep 120

done

While是死循环语句,该脚本在执行时do和done部分会无限执行

(1)vmstat命令可以查看CPU、内存、swap分区等等使用情况。如图:

这里cpu下的id(即idle空闲的)代表的是cpu空闲值。cpu使用率达到80,就是说这里的id小于等于20。可以看到目前cpu的空闲率为98.

awk是一种文本处理工具

| 叫做管道符(pipe),作用是将前一个命令的输出作为下一个命令的输入

(2)vmstat |awk 'NR==3 { print $0 }' 的意思把vmstat输出的文本流的第三行(NR==3)的所有列过滤并打印出来(print $0),如图:

(这就是上一幅图的第三行,因为截图时间不同,数值上有细微的差别很正常)

(3)接着在vmstat |awk 'NR==3 { print $0 }' 的基础上进一步进行加工变为

vmstat |awk 'NR==3 { print $0 }' |awk '{ printf $(NF-2) }'

意思是打印出上一幅图那一行文本的倒数第三列(默认间隔符为空格)$NF代表最后一列,$(NF-1)代表倒数第二列,以此类推。由此一来这样的得到结果如图:

也就是目前cpu空闲值为99

(4)cpu_idle=`vmstat |awk 'NR==3 { print $0 }' |awk '{ printf $(NF-2) }'`

把cpu的空闲值赋给自定义变量cpu_idle

(5)if语句结构

If 判断条件

then

执行动作1

else

执行动作2

Fi

if语句用法是,如果判断条件成立,则执行then部分动作,否则就执行else部分动作

if [ $cpu_idle -lt 20 ]

then

echo "Warning,CPU is going to reach the limit." |mail -s "CPU warning" root@localhost

else

:

fi

这里条件判断句是$cpu_idle -lt 20,意思是cpu_idle这个变量是否小于20. -lt (little than)代表小于。-gt就是(greater than)大于。

echo "Warning,CPU is going to reach the limit." |mail -s "CPU warning" root@localhost

意思是发送一封邮件,标题是CPU warning 内容是Warning,CPU is going to reach the limit. 邮件内容可以自定义

注意如果没有mail命令需要先安装mail 执行yum -y install mail即可

邮件可以在/var/mail/目录下查看

:意思是什么都不做

所以整个if语句的意思是,如果cpu_idle这个变量小于20,那么就发邮件给本地root用户。如果不小于20,则什么也执行。

(6)sleep 120意思是程序沉睡120秒

while是死循环,所以会不断的一遍遍执行。没有必要不断检查cpu,这会给系统增加负担。所以sleep 120秒,就可以120秒检查一次cpu,这个时间可以更长。

脚本完成,开始试验

(1)执行脚本,并加上x参数以便看到执行过程,如图:

此时的cpu_idle为99,不小于20,所以什么也不做,沉睡120秒后会再次执行。查看/var/mail目录发现为空,没有邮件。

(2)当cpu使用到80%以上时:

查看/var/mail/

打开查看邮件内容:

相关文档
最新文档