使用shell脚本编写监控系统资源(CPU,内存,磁盘)使用情况

 

🏡作者主页:点击! 

🛠️Shell编程专栏:点击!

⏰️创作时间:2024年6月20日16点30分

🀄️文章质量:95分


目录

————前言————

1.本章目标

2.编写脚本

1.获取内存使用率

2.获取根分区磁盘占用率

3.设置监控阈值

4.检查CPU使用率

5.检查内存使用率

6.检查根分区磁盘使用率

7.测试


————前言————

在现代计算机系统中,确保系统资源的高效利用和及时响应异常情况至关重要。对于系统管理员和开发人员来说,监控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}')

解释如下:

  1. free:显示系统的内存使用情况。
  2. grep Mem:从 free 的输出中筛选出包含内存信息的那一行。
  3. awk '{print $3/$2 * 100.0}':计算内存使用率,将已用内存除以总内存并乘以100,得到百分比。
  4. mem=$(...):将计算结果存储在变量 mem 中。

2.获取根分区磁盘占用率

使用 df -h 命令和 awk 命令获取根分区(/)的磁盘占用率,并将其存储在变量 disk 中。

disk=$(df -h / | awk 'NR==2 {print $5}' | sed 's/%//')

解释如下:

  1. df -h /:显示根分区(/)的磁盘使用情况。
  2. awk 'NR==2 {print $5}':提取第二行的第五列数据,即根分区的使用率。
  3. sed 's/%//':去掉使用率百分比后的百分号。
  4. disk=$(...):将结果存储在变量 disk 中。

3.设置监控阈值

定义CPU、内存和磁盘使用率的阈值。分别为80%、90%和90%。

cpuce=80
ncce=90
cpce=90

解释如下:

  1. cpuce=80:设置CPU使用率警戒线为80%。
  2. ncce=90:设置内存使用率警戒线为90%。
  3. cpce=90:设置根分区磁盘使用率警戒线为90%。
4.检查CPU使用率

对比CPU使用率与设定的阈值,如果超过80%,则输出警告信息并发送邮件通知。

if (( $(echo "$cpu >= $cpuce" | bc -l) )); thenecho "CPU占用率超过80% ($cpu%)"echo "CPU占用率超过80%" | mail -s "监控警报" monitor@bdqn.com
elseecho "CPU占用率 $cpu%"
fi

解释如下:

  • if (( $(echo "$cpu >= $cpuce" | bc -l) )):使用 bc 计算表达式,如果 cpu 大于或等于 cpuce
  • echo "CPU占用率超过80% ($cpu%)":输出警告信息。
  • echo "CPU占用率超过80%" | mail -s "监控警报" monitor@bdqn.com:发送警报邮件。
  • elseecho "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:发送警报邮件。
  • elseecho "内存使用率 $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:发送警报邮件。
  • elseecho "磁盘使用率 $disk%":如果 disk 低于 cpce,输出当前磁盘使用率。

7.测试

编写完成之后执行测试

 "成功的路上没有捷径,只有不断的努力与坚持。如果你和我一样,坚信努力会带来回报,请关注我,点个赞,一起迎接更加美好的明天!你的支持是我继续前行的动力!"

"每一次创作都是一次学习的过程,文章中若有不足之处,还请大家多多包容。你的关注和点赞是对我最大的支持,也欢迎大家提出宝贵的意见和建议,让我不断进步。"

神秘泣男子

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/37607.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Java异常处理详解【入门篇】

Java异常处理详解【入门篇】 Java异常处理详解1. 异常的概念2. 异常的分类2.1 检查异常(Checked Exception)2.2 非检查异常(Unchecked Exception)2.3 错误(Error) 3. 异常处理机制3.1 try-catch3.2 finally…

CesiumJS【Basic】- #025 生成kml/kmz文件

文章目录 生成kml/kmz文件1 目标2 代码2.1 main.ts生成kml/kmz文件 1 目标 生成kml/kmz文件(kmz是kml的压缩格式) 2 代码 首先添加点线面并且赋予不同的颜色,然后导出生成kml/kmz文件 2.1 main.ts import * as Cesium from "cesium";const viewer = new Ces…

微服务 | Springboot整合GateWay+Nacos实现动态路由

1、简介 路由转发 执行过滤器链。 ​ 网关,旨在为微服务架构提供一种简单有效的统一的API路由管理方式。同时,基于Filter链的方式提供了网关的基本功能,比如:鉴权、流量控制、熔断、路径重写、黑白名单、日志监控等。 基本功能…

YOLO:一种革命性的实时目标检测算法

目标检测是计算机视觉领域中的一项基础任务,它涉及到在图像或视频帧中识别和定位多个目标对象。传统的目标检测方法,如R-CNN系列算法,虽然在精度上取得了不错的成绩,但它们通常需要多步骤的处理过程,导致检测速度较慢&…

linux 删除文件(批量删除文件)

一般的删除文件的操作 删除几个文件 rm 文件1 文件2 删除文件夹下面所有文件 rm * -rf 删除某些固定字母开头的文件 rm xxx* 删除一类文件 rm .txt 批量删除文件 首先查找我们要删除的某类批量的文件: find . -maxdepth 1 -regex “.ws.” maxdepth参数为1表示只在当…

4054充电芯片经常烧坏?Type-c口的烧坏充电芯片如何去解决

4054是一款常用的锂电池充电管理芯片,广泛应用于各种电子设备中。然而,有时候4054会出现经常烧坏的情况,故而让客户对我们的产品质量产生的担忧。特别是现如今快充的时代到来,快充头的使用,出现了更多4054烧坏的现象。…

php开发的系统/软件如何实现闭源?

想到这个问题的起因是想找一款更好用的服务器管理软件, 看到CPanel的介绍“对国际主机市场了解的朋友一定听说过cPanel,它是世界上功能强大,容易使用,因而比较受用户欢迎的虚拟主机控制系统。cPanel 是一套在网页寄存业中最享负盛…

在python docker中安装ESL库

概述 功能需求,把python脚本移植到docker中。 因为python脚本中有使用freeswitch的ESL接口,所以需要安装python-ESL依赖库。 本文记录在python:3.10.14-slim的docker镜像上编译安装python-ESL依赖库的流程。 环境 docker engine: Version 24.0.6 d…

MySQL的三种驱动类型

MySQL 支持多种驱动类型,常见的包括: MySQL Native Driver (mysqlnd): 这是MySQL官方推荐的驱动类型,它是PHP的一个内置扩展。mysqlnd 提供了更高的性能和更好的兼容性,支持MySQL 4.1及以上版本。 MySQL Improved Ext…

在.NET Core中,config和ConfigureServices的区别和作用

在.NET Core中,config和ConfigureServices是两个不同的概念,它们在应用程序的启动和配置过程中扮演着不同的角色。 ConfigureServices:这是ASP.NET Core应用程序中的一个方法,位于Startup类的内部。它的作用是配置依赖注入(DI)容器…

湘潭大学概率论总结

文章目录 前言试卷结构反思第一个填空题某个大题矩估计和最大似然估计算方差最后 前言 自己其实寒假的时候就想学这个了,但是那个时候在acm训练,就没有学,但是3月份退队了,还是没有学,完全就是自己太拖延的原因&#…

浅谈返利app架构设计

浅谈返利app架构设计 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿!今天我们来探讨返利App的架构设计,这是一个技术性的话题,我们将深入…

【ES】--Elasticsearch的翻页详解

目录 一、前言二、from+size浅分页1、from+size导致深度分页问题三、scroll深分页1、scroll原理2、scroll可以返回总计数量四、search_after深分页1、search_after避免深度分页问题一、前言 ES的分页常见的主要有三种方式:from+size浅分页、scroll深分页、search_after分页。…

基于Java微信小程序同城家政服务系统设计和实现(源码+LW+调试文档+讲解等)

💗博主介绍:✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者,博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌💗 🌟文末获取源码数据库🌟感兴趣的可以先收藏起来,还…

Nginx配置达梦数据库代理及Nginx模块内容总结

Nginx 代理达梦数据库配置 叨叨达梦数据库代理Nginx模块说明stream模块main 全局块event块http块server块location块 本文参考了 https://blog.csdn.net/qq_42402854/article/details/132843413 叨叨 由于公司网络安全问题,应用服务器端开开放需要走策略申请&#…

C#面:举列 a=10,b=15,在不用第三方变量的前提下,把a,b的值互换

要在不使用第三方变量的前提下交换a和b的值,可以使用异或运算。异或运算的特性是,对于两个相同的数进行异或运算,结果为0;对于任意数与0进行异或运算,结果为该数本身。因此,可以通过多次异或运算来实现变量…

【Sublime】Sublime Text 中运行终端

Sublime Text 本身并不是一个终端仿真器,可以使用插件来在 Sublime Text 中集成终端功能。最常用的插件之一是“Terminal”。 使用“Terminal”插件在 Sublime Text 中启动终端 以下是安装和使用该插件的步骤: 安装 Package Control: 如果你…

面试突击:HashMap 源码详解

本文已收录于:https://github.com/danmuking/all-in-one(持续更新) 数据结构 JDK1.8 之前 JDK1.8 之前 HashMap 采用 数组和链表 结合的数据结构。如下图: HashMap 将 key 的 hashCode 经过扰动函数处理过后得到 hash 值&#…

网络编程客户端和服务端连接流程

服务器端:socket()-->bind( )-->listen()-->accept()-->read()/write()--->close()socket()//创建套接字 bind()//命名socket,分配套接字地址 listen()//监听状态,等待连接请求状态 accept()//允许连接(被动连接) read()/writ…

java第二十九课 —— 断点 | 零钱通项目

断点调试(debug) 实际需求 在开发中,新手程序员在查找错误时,这时老程序员就会温馨提示,可以用断点调试步一步的看源码执行的过程,从而发现错误所在。 重要提示:在断点调试过程中,…