Linux中可通过Shell脚本结合df命令定期检查磁盘使用率并告警:基础版检测根分区超90%时邮件通知并记日志;增强版遍历挂载点、多阈值、加锁防重、fallback日志;可集成cron或systemd timer,支持Telegram/钉钉Webhook。

在 Linux 中,可以通过编写 Shell 脚本定期检查磁盘使用率,当超过设定阈值时自动发送告警(如邮件、日志记录或系统通知)。核心是结合 df 命令获取使用率,用条件判断触发动作。
基础脚本:检测根分区并邮件告警
以下是一个轻量实用的示例,检查 / 分区使用率是否超过 90%:
- 用
df -h / | awk 'NR==2 {print $5}' | sed 's/%//'提取百分比数字(去 % 符) - 用
if [ "$used" -gt 90 ]判断是否超限 - 触发
mail -s "Disk Alert: / is ${used}%" admin@example.com < /dev/null发送简短邮件 - 同时写入日志:
echo "$(date): / usage ${used}%" >> /var/log/disk-alert.log
增强版:遍历所有挂载点并支持多阈值
生产环境建议检查所有关键挂载点(如 /home、/var),并为不同路径设置不同阈值:
- 用
df -P | awk '$5 ~ /[0-9]+%/ {sub(/%/,"",$5); if($5 > 85 && $1 !~ /^overlay|shm|tmpfs/) print $1, $5}'过滤真实磁盘分区 - 对每个结果循环处理,例如
/var设 85%,/data设 95%,其余统一 90% - 告警前加锁(
if mkdir /tmp/disk_alert_lock 2>/dev/null)避免重复执行 - 失败时 fallback 到本地日志 +
logger写入系统日志(logger -t disk-monitor "Alert sent for $mount")
集成到系统:定时运行与权限配置
脚本需可靠、低干扰地长期运行:
- 保存为
/usr/local/bin/check-disk.sh,添加可执行权限:chmod +x /usr/local/bin/check-disk.sh - 用
crontab -e添加定时任务,例如每 10 分钟检查一次:*/10 * * * * /usr/local/bin/check-disk.sh >/dev/null 2>&1 - 若发邮件,确保系统已配置 MTA(如
ssmtp、msmtp或postfix),测试命令:echo "test" | mail -s "test" your@email.com - 非 root 用户运行时,注意
df对某些挂载点(如 LVM、加密卷)可能需要权限,建议用 root cron
可选升级:配合 systemd 服务与 Telegram/钉钉通知
如需更健壮的监控,可脱离 cron,改用 systemd timer:
- 编写
/etc/systemd/system/disk-monitor.service,定义Type=oneshot和ExecStart - 配套
disk-monitor.timer设置OnUnitActiveSec=10min - 用 curl 调用 Webhook 发送告警到 Telegram Bot 或钉钉机器人(替换 token 和 chat_id 即可)
- 加入简单去重逻辑:检查最近 1 小时内是否已发过同路径告警(用
find /tmp -name "alert_*" -mmin -60判断)


















