当前位置: 首页 > news >正文

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

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

第一步 编写脚本

#!/bin/bash# 邮件配置
recipient="zhaoqingyou@99qhzt.com"
subject="磁盘空间警报"
mail_cmd="/usr/bin/mail"  # 根据实际邮件命令路径修改# 检查是否安装邮件工具
if [ ! -f "$mail_cmd" ]; thenecho "错误:邮件发送工具未安装,请先执行以下命令安装:"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* ]]; thencontinuefi# 提取使用百分比(去掉%符号)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" $recipientecho "[$(date +'%Y-%m-%d %H:%M:%S')] 已发送警报邮件:$mount_point 使用率 ${usage}%"fi
done

第二步 使用方法

  1. 保存脚本为 disk_monitor.sh
  2. 赋予执行权限:
    chmod +x disk_monitor.sh
    
  3. 配置邮件系统(以Ubuntu为例):
    sudo apt-get install mailutils
    sudo dpkg-reconfigure postfix  # 选择Internet Site,其他保持默认
    
  4. 测试脚本:
    ./disk_monitor.sh
    

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

crontab -e

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

0 8 * * * /path/to/disk_monitor.sh

关键功能说明:

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

第三步 增强功能建议

  1. 多阈值分级报警:

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

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

    if [[ $mount_point == /nfs* ]]; thencontinue
    fi
    

最后 注意事项

  1. 确保mail命令路径正确(使用which mail查看)
  2. 测试时可将阈值临时改为50%方便验证
  3. 生产环境建议使用企业级监控系统(如Zabbix、Prometheus)运维人员和公司资金到位的情况下
http://www.xdnf.cn/news/235783.html

相关文章:

  • MCP 自定义python实现server服务,支持离线调用和远程接口访问形式
  • 【IP101】图像处理基础:从零开始学习颜色操作(RGB、灰度化、二值化、HSV变换)
  • Kaamel白皮书:OpenAI 在安全方向的实践
  • Vulkan 学习(16)---- 使用 VertexBuffer
  • Python魔法函数深度解析
  • 关于epoch、batch_size等参数含义,及optimizer.step()的含义及数学过程
  • pinia实现数据持久化插件pinia-plugin-persist-uni
  • 10、属性和数据处理---c++17
  • 突破SQL注入字符转义的实战指南:绕过技巧与防御策略
  • 《Ultralytics HUB:开启AI视觉新时代的密钥》
  • Stack--Queue 栈和队列
  • 前端基础之《Vue(13)—重要API》
  • Dify Agent节点的信息收集策略示例
  • 【效率提升】Vibe Coding时代如何正确使用输入法:自定义短语实现Prompt快捷输入
  • windows系统 压力测试技术
  • Github开通第三方平台OAuth登录及Java对接步骤
  • ES使用之查询方式
  • 空域伦理与AI自主边界的系统建构
  • 《冰雪传奇点卡版》:第二大陆介绍!
  • Java 手写jdbc访问数据库
  • 代理脚本——爬虫
  • 【MySQL】索引特性
  • JGQ511机械振打袋式除尘器实验台装置设备
  • 鸿蒙的StorageLink
  • BT137-ASEMI机器人功率器件专用BT137
  • 【Hive入门】Hive性能优化:执行计划分析EXPLAIN命令的使用
  • 41 python http之requests 库
  • spring中的@Configuration注解详解
  • pytorch的cuda版本依据nvcc --version与nvidia-smi
  • 企业架构之旅(4):TOGAF ADM 中业务架构——企业数字化转型的 “骨架”