下面是用于检测硬盘空间并在使用量达到80%时发送邮件的Shell脚本
第一步 编写脚本
bash
#!/bin/bash
# 邮件配置
recipient="[email protected]"
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
第二步 使用方法
-
保存脚本为
disk_monitor.sh
-
赋予执行权限:
bashchmod +x disk_monitor.sh
-
配置邮件系统(以Ubuntu为例):
bashsudo apt-get install mailutils sudo dpkg-reconfigure postfix # 选择Internet Site,其他保持默认
-
测试脚本:
bash./disk_monitor.sh
设置定时任务(每天检查):
bash
crontab -e
添加以下内容(每天8点检查):
bash
0 8 * * * /path/to/disk_monitor.sh
关键功能说明:
df -h
:获取人类可读的磁盘使用信息awk '{print $5}'
:提取使用百分比列tr -d '%'
:移除百分号用于数值比较mail
命令:发送邮件的核心工具- 自动过滤tmpfs等临时文件系统
- 包含详细磁盘信息和服务器标识
第三步 增强功能建议
-
多阈值分级报警:
bashif [ "$usage" -ge 90 ]; then subject="紧急!磁盘空间警报" elif [ "$usage" -ge 80 ]; then subject="警告!磁盘空间警报" fi
-
添加日志记录:
bashlog_file="/var/log/disk_monitor.log" echo "[$(date +'%Y-%m-%d %H:%M:%S')] $mount_point 使用率 ${usage}%" >> $log_file
-
排除特定挂载点(如NFS):
bashif [[ $mount_point == /nfs* ]]; then continue fi
最后 注意事项
- 确保
mail
命令路径正确(使用which mail
查看) - 测试时可将阈值临时改为50%方便验证
- 生产环境建议使用企业级监控系统(如Zabbix、Prometheus)运维人员和公司资金到位的情况下