Linux脚本实现文件系统使用率大于90%报警
在Linux运维中,磁盘空间告警是系统监控的核心环节之一。若文件系统使用率超过90%仍未处理,极易导致系统写入失败、服务宕机或数据库损坏。下面介绍一种轻量级Shell脚本方案,可自动检测文件系统使用率并在超过阈值时发送报警信息。⚙️

一、设计思路 🧠
脚本核心思路:
- 调用
df -h获取所有挂载点的使用率; - 过滤出超过阈值(如90%)的分区;
- 生成告警信息;
- 可根据环境选择输出到终端、写入日志或通过邮件/钉钉等方式发送报警。
这种方案无须安装复杂监控系统,适合中小型服务器环境或快速自检脚本使用。
二、核心脚本实现 🧩
以下为完整可用脚本:
#!/bin/bash
# ======================================================
# Linux 文件系统使用率监控脚本
# 功能:检测各挂载点使用率,若超过90%则报警
# 作者:BlueEasy DevOps
# 日期:2025-11
# ======================================================
# 设置阈值(百分比)
THRESHOLD=90
# 告警日志文件
LOG_FILE="/var/log/disk_usage_monitor.log"
# 当前时间
DATE=$(date "+%Y-%m-%d %H:%M:%S")
# 读取文件系统使用情况
df -hP | awk 'NR>1 {print $5 " " $6}' | while read output; do
USE=$(echo $output | awk '{print $1}' | tr -d '%')
MOUNT=$(echo $output | awk '{print $2}')
if [ "$USE" -ge "$THRESHOLD" ]; then
MSG="⚠️ [磁盘告警] 时间: $DATE | 挂载点: $MOUNT | 使用率: ${USE}%"
echo "$MSG" | tee -a "$LOG_FILE"
# 可选:邮件或钉钉通知
# mail -s "磁盘使用率告警 - $MOUNT" admin@example.com <<< "$MSG"
# curl -X POST -H 'Content-Type: application/json' \
# -d "{\"msgtype\": \"text\", \"text\": {\"content\": \"$MSG\"}}" \
# https://oapi.dingtalk.com/robot/send?access_token=xxxxxx
fi
done
三、脚本说明与执行方式 📜
| 项目 | 说明 |
|---|---|
df -hP |
获取分区信息,-P保证输出固定列宽,便于解析 |
awk 'NR>1 {print $5 " " $6}' |
跳过表头,仅提取使用率与挂载点 |
tr -d '%' |
去除百分号,便于数值比较 |
tee -a |
同时输出到屏幕与日志文件 |
mail/curl |
可选扩展,用于邮件或钉钉通知 |
执行方法:
chmod +x /usr/local/bin/disk_monitor.sh
bash /usr/local/bin/disk_monitor.sh
如需定期执行,可配置Crontab:
*/10 * * * * /usr/local/bin/disk_monitor.sh >/dev/null 2>&1
表示每10分钟检测一次。
四、执行结果示例 🧾
假设 / 分区使用率达93%,日志输出如下:
⚠️ [磁盘告警] 时间: 2025-11-12 14:36:27 | 挂载点: / | 使用率: 93%
若一切正常,则不会产生输出,也不会写入日志。
五、扩展优化建议 🚀
- 多级告警机制
-
85% 记录日志
-
90% 邮件提醒
-
95% 短信/即时通知
-
- 自动清理策略
- 在检测到高占用时自动执行日志清理或临时文件清除。
- 多主机集中监控
- 将脚本输出汇总至Prometheus、Zabbix或ELK系统中,形成统一监控面板。
六、核心原理表 🔍
| 阶段 | 动作 | 作用 |
|---|---|---|
| 监测阶段 | 执行 df -hP |
获取实时磁盘使用率 |
| 分析阶段 | awk提取字段 | 转换为数值判断 |
| 报警阶段 | 条件比较后输出 | 超阈值触发 |
| 扩展阶段 | 邮件/钉钉通知 | 快速响应问题 |
七、结语 🎯
该脚本实现了低耦合、高兼容、零依赖的文件系统告警机制。通过简单配置即可在任何Linux发行版中运行,有效预防磁盘爆满引发的系统风险。
一句话总结:
“监控不是复杂,而是要在关键点发声。” 🛠️
已经是第一篇啦!