shell脚本之cpu监控
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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/
打开查看邮件内容: