🏡作者主页:点击!
🛠️Shell编程专栏:点击!
⏰️创作时间:2024年6月20日16点30分
🀄️文章质量:95分
目录
————前言————
在现代计算机系统中,确保系统资源的高效利用和及时响应异常情况至关重要。对于系统管理员和开发人员来说,监控CPU、内存和磁盘使用情况是日常维护的核心任务之一。Shell脚本作为一种强大而灵活的工具,能够帮助我们自动化这些监控任务,实时获取系统资源使用情况,并在资源使用超过设定阈值时及时发出警报。
1.本章目标
本篇文章将带领您学习如何编写一个简单但功能强大的Shell脚本,用于监控系统的CPU、内存和根分区磁盘的使用情况。当某项资源的使用率超过预设的警戒值时,脚本将自动发送警报邮件通知相关人员。通过本次学习,您将掌握基础的Shell编程技巧,并能将这些知识应用到实际的系统监控中去。准备好了吗?让我们开始探索Shell编程的世界吧!
题目
请编写一个Shell脚本,用于监控系统的CPU、内存和根分区磁盘的使用情况。该脚本需要在资源使用超过设定的阈值时发送警报邮件。
2.编写脚本
vim /sysmon.sh
加入一下内容
1.获取内存使用率
使用 free
命令和 awk
命令计算当前的内存使用率,并将其存储在变量 mem
中。
mem=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
解释如下:
free
:显示系统的内存使用情况。grep Mem
:从free
的输出中筛选出包含内存信息的那一行。awk '{print $3/$2 * 100.0}'
:计算内存使用率,将已用内存除以总内存并乘以100,得到百分比。mem=$(...)
:将计算结果存储在变量mem
中。
2.获取根分区磁盘占用率
使用 df -h
命令和 awk
命令获取根分区(/)的磁盘占用率,并将其存储在变量 disk
中。
disk=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')
解释如下:
df -h /
:显示根分区(/)的磁盘使用情况。awk 'NR==2 {print $5}'
:提取第二行的第五列数据,即根分区的使用率。sed 's/%//'
:去掉使用率百分比后的百分号。disk=$(...)
:将结果存储在变量disk
中。
3.设置监控阈值
定义CPU、内存和磁盘使用率的阈值。分别为80%、90%和90%。
cpuce=80
ncce=90
cpce=90
解释如下:
cpuce=80
:设置CPU使用率警戒线为80%。ncce=90
:设置内存使用率警戒线为90%。cpce=90
:设置根分区磁盘使用率警戒线为90%。
4.检查CPU使用率
对比CPU使用率与设定的阈值,如果超过80%,则输出警告信息并发送邮件通知。
if (( $(echo "$cpu >= $cpuce" | bc -l) )); then
echo "CPU占用率超过80% ($cpu%)"
echo "CPU占用率超过80%" | mail -s "监控警报" monitor@bdqn.com
else
echo "CPU占用率 $cpu%"
fi
解释如下:
if (( $(echo "$cpu >= $cpuce" | bc -l) ))
:使用bc
计算表达式,如果cpu
大于或等于cpuce
。echo "CPU占用率超过80% ($cpu%)"
:输出警告信息。echo "CPU占用率超过80%" | mail -s "监控警报" monitor@bdqn.com
:发送警报邮件。else
和echo "CPU占用率 $cpu%"
:如果cpu
低于cpuce
,输出当前CPU使用率。
5.检查内存使用率
对比内存使用率与设定的阈值,如果超过90%,则输出警告信息并发送邮件通知。
if (( $(echo "$mem >= $ncce" | bc -l) )); then
echo "内存使用率超过90% ($mem%)"
echo "内存使用率超过90%" | mail -s "监控警报" monitor@bdqn.com
else
echo "内存使用率 $mem%"
fi
解释如下:
if (( $(echo "$mem >= $ncce" | bc -l) ))
:使用bc
计算表达式,如果mem
大于或等于ncce
。echo "内存使用率超过90% ($mem%)"
:输出警告信息。echo "内存使用率超过90%" | mail -s "监控警报" monitor@bdqn.com
:发送警报邮件。else
和echo "内存使用率 $mem%"
:如果mem
低于ncce
,输出当前内存使用率。
6.检查根分区磁盘使用率
对比根分区磁盘使用率与设定的阈值,如果超过90%,则输出警告信息并发送邮件通知。
if (( $(echo "$disk >= $cpce" | bc -l) )); then
echo "磁盘使用率超过90% ($disk%)"
echo "磁盘使用率超过90%" | mail -s "监控警报" monitor@bdqn.com
else
echo "磁盘使用率 $disk%"
fi
解释如下:
if (( $(echo "$disk >= $cpce" | bc -l) ))
:使用bc
计算表达式,如果disk
大于或等于cpce
。echo "磁盘使用率超过90% ($disk%)"
:输出警告信息。echo "磁盘使用率超过90%" | mail -s "监控警报" monitor@bdqn.com
:发送警报邮件。else
和echo "磁盘使用率 $disk%"
:如果disk
低于cpce
,输出当前磁盘使用率。
7.测试
编写完成之后执行测试
"成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"
"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"
神秘泣男子