Shell脚本实现监控磁盘、CPU、内存占用情况

 更新时间:2023年09月05日 11:41:33   作者:黑夜开发者  
CPU、内存和磁盘是计算机中重要且相互依赖的组件,这篇文章主要为大家详细介绍了如何通过shell实现如何监控他们的使用情况,感兴趣的可以了解下

一、前言

CPU、内存和磁盘是计算机中重要且相互依赖的组件。CPU执行运算和控制指令,内存提供临时存储空间用于存储CPU需要处理的数据和指令,而磁盘则提供长期存储的功能。它们共同工作以实现计算机的正常运行和数据处理任务。

本文主要通过shell实现如何监控他们的使用情况。

二、关于他们

2.1 CPU(中央处理器)

是计算机的核心组件之一,负责执行计算机指令和控制计算机的操作。它是计算机的“大脑”,决定了计算机的运行速度和性能。CPU包含多个核心,每个核心可以执行一个或多个线程的指令。

2.2 内存(也称为随机存取存储器RAM)

是计算机用于存储数据和指令的地方。它是临时存储器,这意味着当计算机关闭或断电时,其中的数据会丢失。内存以字节为单位存储数据,并具有不同的访问速度和容量。计算机将需要处理的数据和指令从磁盘加载到内存中,然后CPU从内存中获取数据并进行处理。

2.3 磁盘(硬盘驱动器)

是计算机用于长期存储数据和程序的设备。相比内存,磁盘的容量更大,但读写速度较慢。磁盘通常是非易失性存储器,这意味着即使计算机关闭或断电,其中的数据也能保持不变。磁盘由一个或多个盘片组成,这些盘片通过磁头来读取和写入数据。计算机通过操作系统和文件系统来管理磁盘上的数据。

三、监控实现

3.1 监控CPU

要编写一个shell脚本来监控CPU占用大小,可以使用命令 top 来获取系统的CPU信息,并解析输出结果。

以下是一个示例的shell脚本代码,该脚本会循环读取CPU的占用情况,并在符合条件时输出提示信息。

#!/bin/bash
# 设置阈值,当CPU占用超过该阈值时进行输出提示
threshold=80
while true
do
    # 使用top命令获取CPU占用信息,并使用grep和awk筛选和解析输出结果
    cpu_usage=$(top -bn 1 | grep "%Cpu(s)" | awk '{print $2}')
    # 将浮点数转换为整数,以便进行比较
    cpu_usage=${cpu_usage%.*}
    echo "Current CPU Usage: ${cpu_usage}%"
    # 检查CPU占用是否超过阈值
    if [ $cpu_usage -gt $threshold ]
    then
        echo "CPU Usage Exceeded Threshold!"
        # 在此处添加其他操作或通知机制
    fi
    # 定义间隔时间,以控制检查频率
    sleep 5
done

以上代码中, threshold 变量定义了设定的阈值,如果CPU占用超过该阈值,将输出警告信息。 top 命令用于获取系统的CPU占用情况, grep awk 用于筛选和解析输出结果。 sleep 命令定义了循环的间隔时间,这里设置为5秒。

你可以根据需求自定义脚本中的阈值、输出信息和其他操作。

3.2 监控内存

你可以使用 free 命令来获取当前系统的内存占用情况,并使用 awk 命令来提取需要的信息。以下是一个示例代码:

#!/bin/bash
# 设置阈值,当内存占用超过该阈值时发送警告
threshold=80
while true; do
    # 使用 free 命令获取内存占用情况,并使用 awk 提取第三行的数据
    mem_info=$(free | awk 'NR==3{print $3/$2 * 100}')
    # 比较内存占用情况和阈值
    if (( $(echo "$mem_info > $threshold" | bc -l) )); then
        echo "内存占用超过阈值($threshold%),当前占用为:$mem_info%"
        # 在此处添加发送警告的代码
    fi
    # 等待一段时间后再次监控
    sleep 5
done

在脚本中, free 命令用于获取内存占用情况,其中 awk 'NR==3{print $3/$2 * 100}' 表示提取 free 命令输出的第三行(包含内存占用信息),并计算内存占用百分比。与阈值进行比较后,如果超过阈值,则输出警告信息。你可以在警告部分加入发送邮件或其他通知的代码。

脚本中使用 sleep 5 表示每隔 5 秒重新检查一次内存占用情况,你可以根据需要更改该值。将以上代码保存为脚本文件(比如 memory_monitor.sh ),并通过 chmod +x memory_monitor.sh 命令给予执行权限后,就可以运行该脚本来监控内存占用情况了。

3.3 监控磁盘

你可以使用 df 命令来获取磁盘占用情况,然后编写一个shell脚本来监控磁盘占用大小。以下是一个示例代码:

#!/bin/bash
# 设置阈值,当磁盘使用率超过该阈值时发送警报
THRESHOLD=90
# 获取磁盘使用率,并提取百分比部分
usage=$(df -h | awk '$NF=="/"{printf "%s\n", $5}' | cut -d'%' -f1)
# 检查磁盘使用率是否超过阈值
if [ $usage -gt $THRESHOLD ]; then
    echo "磁盘使用率超过阈值,请及时清理!"
fi

将上述代码保存到一个文件(例如 check_disk_usage.sh ),然后通过运行 bash check_disk_usage.sh 或者 ./check_disk_usage.sh 来执行脚本。

请注意,即使这个脚本可以监控磁盘使用情况,但它并不会持续监控。你可能需要使用定时任务工具(如cron)来定期运行这个脚本,以便实现长期监控。

四、配置crontab

这些脚本写好了,需要定时执行,可以通过crontab配置每天或者几个小时跑一次。下面是每8小时跑一次的配置。

* */8 * * * bash /你的代码基础路径/disk.sh

五、总结

服务器的 CPU 、 磁盘 和 内存 是服务器运行和处理任务的关键组件,它们的正常运行状态对服务器的稳定性和性能至关重要。因此,监控服务器的 CPU 、 磁盘 和 内存 的使用情况是非常必要的。

以上就是Shell脚本实现监控磁盘、CPU、内存占用情况的详细内容,更多关于Shell磁盘监控的资料请关注脚本之家其它相关文章!

相关文章

  • 101个shell脚本 猜数字游戏代码

    101个shell脚本 猜数字游戏代码

    原本书上这个例子是教调试脚本的,它故意给出的脚本中有几个错误,教我们认识系统提示的错误,并修改运行。但比较难写出来,所以把修改好了的脚本放上来,这个脚本比较有趣味的
    2016-08-08
  • 监控服务器swap并重启php的Shell脚本

    监控服务器swap并重启php的Shell脚本

    有一台服务器老是交换扇区占满然后失去响应,很烦,因为加载了以前别人写的一个php扩展,效率低,资源占用大,悲剧的是现在还没有可以替换的东西
    2014-03-03
  • Shell 编程:Bash空格的那点事

    Shell 编程:Bash空格的那点事

    空格,一个看不见的字符,很不起眼,也正由于不起眼,很多人经常忽略它,导致代码出错,却还找不着北。这里,我们来聊聊bash中空格的那点事
    2015-01-01
  • Linux下快速比较两个目录的不同(多种方法)

    Linux下快速比较两个目录的不同(多种方法)

    这篇文章主要介绍了Linux下快速比较两个目录的不同,本文给大家带来了多种方法,非常不错,具有一定的参考借鉴价值,感兴趣的朋友跟随脚本之家小编一起学习吧
    2018-05-05
  • Linux下使用expect命令编写自动化交互脚本

    Linux下使用expect命令编写自动化交互脚本

    今天小编就为大家分享一篇关于Linux下使用expect命令编写自动化交互脚本,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2018-11-11
  • Linux vim编辑命令模式

    Linux vim编辑命令模式

    vi(vim)是上Linux非常常用的编辑器,很多Linux发行版都默认安装了vi(vim)。这篇文章给大家介绍了Linux vim编辑命令模式,非常不错,感兴趣的朋友参考下吧
    2016-11-11
  • Linux shell命令行查询文件中内容常用的命令及其用法

    Linux shell命令行查询文件中内容常用的命令及其用法

    在Linux中,查找文件内容可以使用多种命令,如grep、find、ack和ripgrep,这些工具各有特点,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2024-09-09
  • linux shell 中双引号和单引号的区别解析

    linux shell 中双引号和单引号的区别解析

    最近在编写shell脚本时,发现引号使用的比较频繁,也出现过小问题,现根据我的使用情况做一下总结,也加深一下自己的印象,这篇文章主要介绍了linux shell 中双引号和单引号的区别解析,需要的朋友可以参考下
    2024-02-02
  • shell脚本中set -e选项作用范围小结

    shell脚本中set -e选项作用范围小结

    本文主要介绍了shell脚本中set -e选项作用范围小结,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-06-06
  • shell按行读取文件的3种方法

    shell按行读取文件的3种方法

    这篇文章主要介绍了shell按行读取文件的3种方法,需要的朋友可以参考下
    2014-04-04

最新评论