Bash 语言 系统资源使用监控脚本

Bash阿木 发布于 2025-06-13 6 次阅读


Bash 系统资源使用监控脚本编写指南

在Linux系统中,系统资源的使用情况对于系统的稳定性和性能至关重要。通过编写Bash脚本,我们可以实现对系统资源(如CPU、内存、磁盘等)的实时监控,以便及时发现潜在的问题并进行优化。本文将围绕Bash语言,详细介绍如何编写一个系统资源使用监控脚本。

文章大纲

1. 监控目标与需求分析
2. Bash脚本基础知识
3. 监控CPU使用情况
4. 监控内存使用情况
5. 监控磁盘使用情况
6. 脚本整合与优化
7. 脚本部署与使用
8. 总结

1. 监控目标与需求分析

在编写监控脚本之前,我们需要明确监控的目标和需求。以下是一些常见的监控目标:

- 监控CPU使用率,确保系统不会因为CPU过载而崩溃。
- 监控内存使用情况,避免内存溢出导致系统崩溃。
- 监控磁盘空间,防止磁盘空间不足影响系统性能。
- 定期记录监控数据,以便后续分析和优化。

2. Bash脚本基础知识

Bash是Linux系统中最常用的Shell之一,它提供了丰富的命令和功能,可以用来编写脚本。以下是一些Bash脚本编写的基础知识:

- 变量:用于存储数据,如`CPU_USAGE=80`。
- 运算符:用于执行数学运算或比较操作,如`$((CPU_USAGE > 70))`。
- 流程控制:用于控制脚本的执行流程,如`if`、`for`、`while`等。
- 输入输出:用于读取用户输入或输出信息,如`echo`、`read`等。

3. 监控CPU使用情况

以下是一个简单的Bash脚本,用于监控CPU使用率:

bash
!/bin/bash

获取CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/., ([0-9.])% id./1/" | awk '{print 100 - $1}')

判断CPU使用率是否超过阈值
THRESHOLD=70
if [ $CPU_USAGE -gt $THRESHOLD ]; then
echo "Warning: CPU usage is high at $CPU_USAGE%."
fi

4. 监控内存使用情况

以下是一个简单的Bash脚本,用于监控内存使用率:

bash
!/bin/bash

获取内存使用率
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 100.0}')

判断内存使用率是否超过阈值
THRESHOLD=80
if [ $MEM_USAGE -gt $THRESHOLD ]; then
echo "Warning: Memory usage is high at $MEM_USAGE%."
fi

5. 监控磁盘使用情况

以下是一个简单的Bash脚本,用于监控磁盘使用率:

bash
!/bin/bash

获取磁盘使用率
DISK_USAGE=$(df -h | grep "/" | awk '{print $5}')

判断磁盘使用率是否超过阈值
THRESHOLD=80
if [[ $DISK_USAGE == "%" && $(echo $DISK_USAGE | cut -d'%' -f1) -gt $THRESHOLD ]]; then
echo "Warning: Disk usage is high at $DISK_USAGE."
fi

6. 脚本整合与优化

将上述脚本整合到一个文件中,并添加一些优化措施,如:

- 使用日志记录监控数据。
- 定时执行脚本,如使用`cron`。
- 发送报警信息,如使用邮件或短信。

以下是一个整合后的脚本示例:

bash
!/bin/bash

设置监控阈值
THRESHOLD_CPU=70
THRESHOLD_MEM=80
THRESHOLD_DISK=80

获取CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/., ([0-9.])% id./1/" | awk '{print 100 - $1}')

获取内存使用率
MEM_USAGE=$(free | grep Mem | awk '{print $3/$2 100.0}')

获取磁盘使用率
DISK_USAGE=$(df -h | grep "/" | awk '{print $5}')

记录监控数据到日志文件
LOG_FILE="/var/log/system_monitor.log"
echo "$(date) - CPU: $CPU_USAGE%, Memory: $MEM_USAGE%, Disk: $DISK_USAGE" >> $LOG_FILE

判断并报警
if [ $CPU_USAGE -gt $THRESHOLD_CPU ]; then
echo "Warning: CPU usage is high at $CPU_USAGE%." | mail -s "CPU Alert" admin@example.com
fi

if [ $MEM_USAGE -gt $THRESHOLD_MEM ]; then
echo "Warning: Memory usage is high at $MEM_USAGE%." | mail -s "Memory Alert" admin@example.com
fi

if [[ $DISK_USAGE == "%" && $(echo $DISK_USAGE | cut -d'%' -f1) -gt $THRESHOLD_DISK ]]; then
echo "Warning: Disk usage is high at $DISK_USAGE." | mail -s "Disk Alert" admin@example.com
fi

7. 脚本部署与使用

1. 将脚本保存到一个文件中,如`system_monitor.sh`。
2. 给脚本执行权限:`chmod +x system_monitor.sh`。
3. 使用`crontab`定时执行脚本:编辑`crontab -e`,添加一行,如`0 /path/to/system_monitor.sh`。
4. 启动邮件服务,确保报警信息能够发送。

8. 总结

我们了解了如何使用Bash语言编写系统资源使用监控脚本。通过监控CPU、内存和磁盘使用情况,我们可以及时发现系统问题并进行优化,确保系统的稳定性和性能。在实际应用中,可以根据具体需求对脚本进行修改和扩展。