#!/bin/bash
# 定义邮件接收者,即管理员邮箱
ADMIN_EMAIL="admin@example.com"
# 定义阈值
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=90
# 持续运行
while true
do
# 获取CPU使用率
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 获取内存使用率
MEMORY_USAGE=$(free -h | awk '/Mem:/ {printf("%.2f"), $3/$2*100}')
# 获取磁盘空间使用率
DISK_USAGE=$(df -h | awk '$NF=="/"{printf("%.2f"), $5}' | sed 's/%//')
# 检查CPU使用率是否超过阈值
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
MESSAGE="CPU使用率超过阈值!当前CPU使用率:$CPU_USAGE%。"
echo -e "$MESSAGE" | mail -s "系统监控警报 - CPU使用率过高" $ADMIN_EMAIL
fi
# 检查内存使用率是否超过阈值
if (( $(echo "$MEMORY_USAGE > $MEMORY_THRESHOLD" | bc -l) )); then
MESSAGE="内存使用率超过阈值!当前内存使用率:$MEMORY_USAGE%。"
echo -e "$MESSAGE" | mail -s "系统监控警报 - 内存使用率过高" $ADMIN_EMAIL
fi
# 检查磁盘空间使用率是否超过阈值
if (( $(echo "$DISK_USAGE > $DISK_THRESHOLD" | bc -l) )); then
MESSAGE="磁盘空间使用率超过阈值!当前磁盘空间使用率:$DISK_USAGE%。"
echo -e "$MESSAGE" | mail -s "系统监控警报 - 磁盘空间使用率过高" $ADMIN_EMAIL
fi
# 处理获取系统指标失败的情况
if [ -z "$CPU_USAGE" ] || [ -z "$MEMORY_USAGE" ] || [ -z "$DISK_USAGE" ]; then
MESSAGE="获取系统指标失败,请检查系统状态。"
echo -e "$MESSAGE" | mail -s "系统监控警报 - 获取指标失败" $ADMIN_EMAIL
fi
# 每隔5分钟检查一次系统状态
sleep 300
done