Linux怎么监控磁盘空间预警_Linux编写Shell提醒脚本【实战】

用 df -p 获取标准格式数据,取第5列去%后校验数字再判断,超90%时用logger记日志预警。

linux怎么监控磁盘空间预警_linux编写shell提醒脚本【实战】

怎么用 df 获取准确的可用空间数值

直接跑 df -h 看着方便,但脚本里不能依赖它——-h 会加单位(K/M/G),没法直接比较大小。必须用 df -P(POSIX 格式),保证字段对齐、无缩写、纯数字输出。

  • df -P / | tail -1 取最后一行,避免头行干扰
  • 第5列是已用百分比(如 87%),需用 sed 's/%//' 去掉百分号才能参与数值判断
  • 第4列是剩余块数(Available),单位是 1K blocks,若要换算成 GB,得除以 1024×1024 —— 但预警逻辑用百分比更稳妥,避免不同文件系统 block size 差异影响

Shell 脚本里怎么判断磁盘超限并触发提醒

别用 [ $used_pct -gt 90 ] 这种裸比较:如果 $used_pct 是空值或非数字(比如 df 失败时),Bash 会报错 integer expression expected,导致脚本中断。

  • 先用 [[ "$used_pct" =~ ^[0-9]+$ ]] 校验是否为纯数字
  • 再用 if (( used_pct > 90 )); then 做数值判断((( ))[ ] 更安全,支持直接算术)
  • 提醒方式优先选 logger -t "disk-alert" "root partition at ${used_pct}%",写入 /var/log/messages,比单纯 echo 可靠——即使无人值守也能查日志
  • 真要发邮件,用 mail -s "DISK FULL on $(hostname)" admin@example.com ,别依赖 GUI 工具(如 <code>notify-send),服务器通常没桌面环境

定时执行时为什么 df 结果和手动执行不一致

常见原因是 crontab 默认 PATH 极简(通常只有 /usr/bin:/bin),而某些系统上 df/bin/df,没问题;但如果你脚本里写了 which df 或调用了 sudo df,cron 就可能找不到命令或权限失败。

Deja Videos

Deja Videos

AI视频内容编辑工具

下载

  • 脚本开头显式声明 PATH=/usr/local/bin:/usr/bin:/bin
  • 所有命令用绝对路径:/bin/df/usr/bin/logger/bin/mail
  • 在 crontab 里测试:加一行 * * * * * /bin/bash -c '/path/to/check_disk.sh >> /tmp/disk.log 2>&1',立刻看 /tmp/disk.log 是否报 command not found
  • 避免在脚本里用 sudo——改用 crontab -e 切到 root 用户下添加任务,更干净

为什么 /dev/shm 占用高却总被误报

/dev/shm 是基于内存的 tmpfs,它的“磁盘使用”本质是内存占用,且默认大小是 RAM 的一半。用 df 监控它会频繁触发误告警,尤其 Java 应用用了大量 DirectByteBuffer 时。

  • df 命令后加 -x tmpfs -x devtmpfs 排除虚拟文件系统
  • 或者明确只监控根分区:df -P / | tail -1,而不是 df -P 全盘扫
  • 若必须监控 /tmp,确认它是不是挂载为独立分区(findmnt /tmp),否则它只是 / 下的子目录,重复监控没意义

真正容易漏的是多挂载点场景:比如 /home/var/log 分别挂了不同磁盘。一个脚本只盯 /,可能 /var/log 已满但完全没反应——得把关键路径列进数组,循环检查。

© 版权声明
THE END
喜欢就支持一下吧
点赞9 分享