【Linux运维】shell脚本检查服务器内存和CPU利用率

在管理服务器时候写了一个 shell脚本,在服务上实现每天凌晨3点查系统的指定文件夹下的容量大小,如果超过10G就要删除3天前的内容,还要时刻查询内存和cpu利用率,如果超过80%就要提示用户出现过载

#!/bin/bash

# 指定要检查的文件夹路径
folder_path="/path/to/folder"

# 获取当前日期前三天的日期
three_days_ago=$(date -d "3 days ago" +%Y%m%d)

# 获取当前日期时间
datetime=$(date +%Y%m%d_%H%M%S)

# 检查文件夹容量,如果超过10G就删除3天前的内容
folder_size=$(du -s $folder_path | awk '{print $1}')
if [ $folder_size -gt 10485760 ]; then
  echo "$datetime: Folder size exceeds 10G, deleting files before $three_days_ago"
  find $folder_path -type f -name "*" -mtime +3 -delete
fi

# 检查内存和CPU利用率,如果超过80%就提示用户出现过载
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
cpu_usage=$(top -bn1 | awk '/Cpu/{printf("%.2f"), $2}')
if (( $(echo "$mem_usage > 80" | bc -l) )) || (( $(echo "$cpu_usage > 80" | bc -l) )); then
  echo "$datetime: System is overloaded, please take action"
fi

将以上代码保存为一个.sh文件,然后通过crontab在每天凌晨3点运行即可:

crontab -e
0 3 * * * /path/to/script.sh

以下是 system_check.sh 脚本中每一行的详细解释:

#!/bin/bash

这是 Bash 脚本的第一行,用于指定脚本使用的解释器。在这里,#!/bin/bash 表示使用 Bash 解释器来执行该脚本。

# 指定要检查的文件夹路径
folder_path="/path/to/folder"

这一行定义了一个变量 folder_path,用于指定要检查的文件夹路径。在这里,变量的值为 /path/to/folder,可以根据实际情况修改。

# 获取当前日期前三天的日期
three_days_ago=$(date -d "3 days ago" +%Y%m%d)

这一行使用 date 命令获取当前日期前三天的日期,并将其保存到变量 three_days_ago 中。+%Y%m%d 表示设置日期的格式为年月日,例如 20220101

# 获取当前日期时间
datetime=$(date +%Y%m%d_%H%M%S)

这一行使用 date 命令获取当前日期时间,并将其保存到变量 datetime 中。+%Y%m%d_%H%M%S 表示设置日期时间的格式为年月日_时分秒,例如 20220101_120000

# 检查文件夹容量,如果超过10G就删除3天前的内容
folder_size=$(du -s $folder_path | awk '{print $1}')
if [ $folder_size -gt 10485760 ]; then
  echo "$datetime: Folder size exceeds 10G, deleting files before $three_days_ago"
  find $folder_path -type f -name "*" -mtime +3 -delete
fi

这一段代码用于检查文件夹容量,如果超过10G就删除3天前的内容。具体来说:

  • du -s $folder_path 命令用于计算指定文件夹的容量大小,并将结果保存到变量 folder_size 中。-s 表示只显示总计大小,不显示每个子目录的大小。
  • if [ $folder_size -gt 10485760 ]; then 表示如果文件夹的容量大小超过10G(即 10485760 KB),则执行下面的命令。
  • echo "$datetime: Folder size exceeds 10G, deleting files before $three_days_ago" 表示输出一条提示信息,指示文件夹容量超过10G,并将日期时间和三天前的日期插入到提示信息中。
  • find $folder_path -type f -name "*" -mtime +3 -delete 命令用于查找并删除文件夹中3天前的文件。-type f 表示只查找文件,-name "*" 表示查找所有文件,-mtime +3 表示查找修改时间在3天前的文件,-delete 表示删除查找到的文件。
# 检查内存和CPU利用率,如果超过80%就提示用户出现过载
mem_usage=$(free | awk '/Mem/{printf("%.2f"), $3/$2*100}')
cpu_usage=$(top -bn1 | awk '/Cpu/{printf("%.2f"), $2}')
if (( $(echo "$mem_usage > 80" | bc -l) )) || (( $(echo "$cpu_usage > 80" | bc -l) )); then
  echo "$datetime: System is overloaded, please take action"
fi

这一段代码用于检查内存和 CPU 利用率,如果超过80%就提示用户出现过载。- free 命令用于查看系统内存使用情况。| awk '/Mem/{printf("%.2f"), $3/$2*100}' 表示将 free 命令的输出通过管道传递给 awk 命令,查找含有 Mem 的行,并计算内存使用率。$3/$2*100 表示计算已用内存占总内存的百分比,并输出到变量 mem_usage 中。

  • top -bn1 命令用于查看当前 CPU 使用情况。| awk '/Cpu/{printf("%.2f"), $2}' 表示将 top 命令的输出通过管道传递给 awk 命令,查找含有 Cpu 的行,并输出第二个字段(即 CPU 利用率)到变量 cpu_usage 中。
  • if (( $(echo "$mem_usage > 80" | bc -l) )) || (( $(echo "$cpu_usage > 80" | bc -l) )); then 表示如果内存使用率或 CPU 利用率超过80%,则执行下面的命令。
  • echo "$datetime: System is overloaded, please take action" 表示输出一条提示信息,指示系统出现过载,并将日期时间插入到提示信息中。

总的来说,该脚本用于检查系统状态,包括文件夹容量和系统资源利用率等方面,如果出现异常情况,则会提示用户采取相应的行动。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试redis之两大金刚,你懂吗

前言 Redis持久化,一个老掉牙的问题,但是面试官就是喜欢问。这也是我们学Redis必会的一个知识点。Redis作为内存数据库,它工作时,数据都保存在内存里,这也是它为什么很快的一个原因。但存到内存里肯定是有丢数据的风险…

易基因:ChIP-seq等揭示热休克转录因子A1b调控植物高温胁迫响应的分子机制|应激反应

在拟南芥中,热休克转录因子A1b(HEAT SHOCK TRANSCRIPTION FACTORA1b,HSFA1b)通过影响种子产量来调控对环境胁迫的抗性。HSFA1b是生殖适应性的决定性因素,这种调控机制怎么形成的呢? 2018年,英国…

【微电网_储能】基于启发式状态机策略和线性程序策略优化方法的微电网中的储能研究【给定系统约束和定价的情况下】(Matlab代码实现)

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 ⛳️座右铭&a…

前端项目代码规范

一、变量与函数的命名(变量名和函数名是最好的注释) 通常情况下函数小陀峰、类名大陀峰、变量短横线/小陀峰、const全大写单词要表达出正确的语义,如:array类型或其它集合类型用英语复数格式、其它类型不要用复数格式区分函数为功…

【服务器】Linux搭建我的世界服务器 + 公网远程联机教程

Yan-英杰的主页 悟已往之不谏 知来者之可追 C程序员,2024届电子信息研究生 目录 前言 1. 安装JAVA 2. MCSManager安装 3.局域网访问MCSM 4.创建我的世界服务器 5.局域网联机测试 6.安装cpolar内网穿透 7. 配置公网访问地址 8.远程联机测试 9. 配置固定…

C++ 线程

linux使用线程 在linux使用线程可能出现,在编译时不会报错,但执行出错的问题。 undefined reference to pthread_create这是由于ubuntu平台下调用pthread_create()函数,pthread 库不是 Linux 系统默认的库,连接时需要使用静态库 …

MII、 RMII、 GMII、 RGMII 接口介绍

1、RGMII 接口概要 以太网的通信离不开物理层 PHY 芯片的支持,以太网 MAC 和 PHY 之间有一个接口,常用的接口有MII、 RMII、 GMII、 RGMII 等。 MII(Medium Independent Interface, 媒体独立接口): MII 支持…

RabbitMQ之介绍以及安装

1.1 MQ的相关概念 1.1.1 什么是MQ ​ MQ,从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已,还是一种跨进程的通信机制,用于上下游传递消息。在互联网架构中,MQ…

移远通信笔试题

限时60分钟 1.下列关于栈叙述正确的是 A A) 栈顶元素最先能被删除 B)栈顶元素最后才能被删除 C)栈底元素永远不能被删除 D)以上三种都不对 在栈中,最后被压入的元素总是在栈顶上方,而栈顶元素总是最先被弹出的元…

理解龙格库塔法基本C程序

先学习龙格-库塔法; 龙格-库塔,Runge-Kutta,该方法用于数值求解微分方程; 其中包括著名的欧拉法; 经典四阶法 该方法主要是在已知方程导数和初值信息,利用计算机仿真时应用,省去求解微分方…

人工智能之配置环境教程一:安装VsCode和Anaconda

人工智能之配置环境教程一:安装VsCode和Anaconda 作者介绍一. 安装VScode编辑器二. 安装Anaconda 作者介绍 孟莉苹,女,西安工程大学电子信息学院,2021级硕士研究生,张宏伟人工智能课题组。 研究方向&#…

shell脚本----条件判断语句

文章目录 一、条件测试1.1 文件测试和整数测试文件测试整数值比较 1.2字符串测试和逻辑测试字符串测试:逻辑测试 二、if语句三、case语句 一、条件测试 1.1 文件测试和整数测试 文件测试 test命令 测试表达是是否成立,若成立则返回0,否则返…

元宇宙的应用领域

应用领域一:游戏 1.游戏是最先成长起来的元宇宙场景。虚拟社交身份、开放性、经济系统、沉浸感、世界可持续性是元宇宙游戏需关注的五大特征。 2.元宇宙游戏依然是游戏,现阶段参与元宇宙游戏的主要是游戏爱好者。新的概念依旧需要好的游戏产品支撑。团…

malloc的一些知识

这是一个叫malloc的家伙,一直勤勤恳恳帮你为所欲为的玩转系统内存。可是长路漫漫,唯malloc作伴,我却不懂它。走近malloc,多了解一下总没错。 可能对我们来讲,malloc就是void* malloc (size_t len),调用就是…

4月24日作业

作业1 #include <iostream> using namespace std; template <typename T> class Node { private: T* p; //指针指向栈的首地址 int maxsize; //栈最大容量 int top-1; //栈顶 public: Node(){} //无参构造 Node(int max):maxsize(max)//有参构造 填最大容…

JavaScript 知识总结下篇(更新版)

91.实现一个 promise 参考链接&#xff1a;实现一个完美符合Promise/A规范的Promise Issue #4 forthealllight/blog GitHub function myPromise(constructor) {let self this;self.status "pending" // 定义状态改变前的初始状态self.value undefined;// 定义状…

基于html+css的图片展示32

准备项目 项目开发工具 Visual Studio Code 1.44.2 版本: 1.44.2 提交: ff915844119ce9485abfe8aa9076ec76b5300ddd 日期: 2020-04-16T16:36:23.138Z Electron: 7.1.11 Chrome: 78.0.3904.130 Node.js: 12.8.1 V8: 7.8.279.23-electron.0 OS: Windows_NT x64 10.0.19044 项目…

STM32WB55_NUCLEO开发(11)----发送数据到手机

概述 本篇文章将详细介绍如何在上节配置的基础上&#xff0c;实现通过点击STM32WB开发板上的按键发送数据到手机上。 硬件准备 首先需要准备一个开发板&#xff0c;这里我准备的是NUCLEO-WB55RG 的开发板&#xff1a; 蓝牙配置 选择“mySVC”选项卡。添加第二个特征&…

有始有终的编码原则

基本情况 在程序员的修炼之道之中&#xff0c;说到&#xff1a; 这个建议能简单地应用到大多数场合。简单说就是&#xff0c;分配资源的函 数或对象&#xff0c;对释放资源应负有责任。 这其实就是我们常说的谁分配的就谁负责释放&#xff0c;这也是内存释放的一个原则&#x…

CGI, FastCGI, WSGI, uWSGI, uwsgi一文搞懂

1. CGI # 1、通用网关接口&#xff08;Common Gateway Interface/CGI&#xff09;是一种重要的互联网技术&#xff0c;可以让一个客户端&#xff0c;从网页浏览器向执行在网络服务器上的程序请求数据。CGI描述了服务器和请求处理程序之间传输数据的一种标准。 # 2、CGI程序可以…
最新文章