从实列中学习linux shell5: 利用shell 脚本 检测硬盘空间容量,当使用量达到80%的时候 发送邮件

下面是用于检测硬盘空间并在使用量达到80%时发送邮件的Shell脚本

第一步 编写脚本

bash 复制代码
#!/bin/bash

# 邮件配置
recipient="zhaoqingyou@99qhzt.com"
subject="磁盘空间警报"
mail_cmd="/usr/bin/mail"  # 根据实际邮件命令路径修改

# 检查是否安装邮件工具
if [ ! -f "$mail_cmd" ]; then
    echo "错误:邮件发送工具未安装,请先执行以下命令安装:"
    echo "Debian/Ubuntu: sudo apt-get install mailutils"
    echo "CentOS/RHEL: sudo yum install mailx"
    exit 1
fi

# 获取所有磁盘分区信息
df -h | while read -r line; do
    # 跳过标题行和临时文件系统
    if [[ $line == Filesystem* ]] || [[ $line == *tmpfs* ]]; then
        continue
    fi

    # 提取使用百分比(去掉%符号)
    usage=$(echo $line | awk '{print $5}' | tr -d '%')
    mount_point=$(echo $line | awk '{print $6}')

    # 判断使用率是否超过80%
    if [ "$usage" -ge 80 ]; then
        # 获取完整磁盘信息
        disk_info=$(df -h $mount_point)
        
        # 构造邮件内容
        message="警告:磁盘空间使用超过阈值!
        
        详细信息:
        $disk_info
        
        请及时清理磁盘空间!
        服务器:$(hostname)
        检测时间:$(date +"%Y-%m-%d %H:%M:%S")"

        # 发送邮件
        echo "$message" | $mail_cmd -s "$subject" $recipient
        echo "[$(date +'%Y-%m-%d %H:%M:%S')] 已发送警报邮件:$mount_point 使用率 ${usage}%"
    fi
done

第二步 使用方法

  1. 保存脚本为 disk_monitor.sh

  2. 赋予执行权限:

    bash 复制代码
    chmod +x disk_monitor.sh
  3. 配置邮件系统(以Ubuntu为例):

    bash 复制代码
    sudo apt-get install mailutils
    sudo dpkg-reconfigure postfix  # 选择Internet Site,其他保持默认
  4. 测试脚本:

    bash 复制代码
    ./disk_monitor.sh

设置定时任务(每天检查):

bash 复制代码
crontab -e

添加以下内容(每天8点检查):

bash 复制代码
0 8 * * * /path/to/disk_monitor.sh

关键功能说明:

  1. df -h:获取人类可读的磁盘使用信息
  2. awk '{print $5}':提取使用百分比列
  3. tr -d '%':移除百分号用于数值比较
  4. mail 命令:发送邮件的核心工具
  5. 自动过滤tmpfs等临时文件系统
  6. 包含详细磁盘信息和服务器标识

第三步 增强功能建议

  1. 多阈值分级报警:

    bash 复制代码
    if [ "$usage" -ge 90 ]; then
        subject="紧急!磁盘空间警报"
    elif [ "$usage" -ge 80 ]; then
        subject="警告!磁盘空间警报"
    fi
  2. 添加日志记录:

    bash 复制代码
    log_file="/var/log/disk_monitor.log"
    echo "[$(date +'%Y-%m-%d %H:%M:%S')] $mount_point 使用率 ${usage}%" >> $log_file
  3. 排除特定挂载点(如NFS):

    bash 复制代码
    if [[ $mount_point == /nfs* ]]; then
        continue
    fi

最后 注意事项

  1. 确保mail命令路径正确(使用which mail查看)
  2. 测试时可将阈值临时改为50%方便验证
  3. 生产环境建议使用企业级监控系统(如Zabbix、Prometheus)运维人员和公司资金到位的情况下
相关推荐
printfLILEI11 分钟前
php中的类与对象以及反序列化
linux·开发语言·php
NagatoYukee16 分钟前
Spring Security基础部分学习
java·学习·spring
米小葱25 分钟前
【学习笔记】cmake
笔记·学习
zyl8372132 分钟前
Docker 使用手册
运维·docker·容器
古月方枘Fry1 小时前
MGRE实验
运维·服务器
叠叠乐1 小时前
redmi k90 pro max 强解BL,刷海外rom, 并刷入sukisu ultra
linux
stolentime1 小时前
FreeDomain 本地开发环境快速搭建指南
运维·服务器·网络
辰海Coding2 小时前
MiniSpring框架学习-分解 Dispatcher
java·学习·spring·架构
初夏睡觉2 小时前
数据结构学习之~二叉堆 (P3378 【模版】堆)
数据结构·c++·学习
xiaoye-duck2 小时前
《Linux系统编程》Linux 进程间通信之管道基础解析:从匿名管道原理到基于管道的进程池实现
linux