场景说明
服务器里有个挂载目录,因为不是本机磁盘所以没法做磁盘告警,只能自己写shell脚本进行判断当利用率大于阈值以后,发送邮件进行提醒,所以瞎编了下面这么个脚本,因为脚本中会调用本级发送邮件应用,所以执行前需要安装程序
#安装命令,根据系统进行执行即可
#Centos 7
yum install -y mailx sendmail
#Rocky Linux 8
dnf install -y mailx sendmail
脚本内容
#!/bin/bash
#author: Anger
#判断参数个数,不是2个参数就推出脚本
if [ $# -ne 2 ]; then
echo "错误:参数不正确"
echo "用法:$0 <监控目录> <触发阈值百分比>"
echo "示例:$0 /var/log 85"
exit 1
fi
#传入要监控的目录
TARGET_DIR=$1
#传入告警阈值
THRESHOLD=$2
#获取当前时间
TIMESTAMP=$(date "+%Y-%m-%d %H:%M:%S")
if [ ! -d "$TARGET_DIR" ]; then
echo "[$TIMESTAMP] 错误:目录 $TARGET_DIR 不存在"
exit 1
fi
if ! [[ "$THRESHOLD" =~ ^[0-9]+$ ]] || [ "$THRESHOLD" -gt 100 ]; then
echo "[$TIMESTAMP] 错误:阈值必须为0-100的整数"
exit 1
fi
#USAGE=$(
# df -P "$TARGET_DIR" 2>/dev/null | awk 'NR==2 {
# gsub(/%/, "", $5)
# print $5
# }'
#)
#if [ -z "$USAGE" ]; then
# echo "[$TIMESTAMP] 错误:无法获取目录使用率"
# exit 1
#fi
#获取监控目录当前使用率
DIR_SIZE=$(du -s --block-size=1G $TARGET_DIR | awk '{print $1}')
RECIPIENT="10000@qq.com"
#判断当监控目录使用率大于阈值后,调用sendmail发送邮件
if [ ${DIR_SIZE} -gt ${THRESHOLD} ]; then
echo "磁盘目录 $TARGET_DIR 使用率已达 ${DIR_SIZE}G,超过阈值 ${THRESHOLD}G" | \
mail -s "【紧急告警】磁盘空间不足" "$RECIPIENT"
fi
邮件大概是这个样子的

脚本增加可执行权限,定时执行就可以了