#!/bin/bash
# 配置参数
LOG_FILE="/var/log/system_monitor.log"
CPU_THRESHOLD=80
MEMORY_THRESHOLD=80
DISK_THRESHOLD=80
EMAIL="your_email@example.com"
# 检查并创建日志文件
if [ ! -f "$LOG_FILE" ]; then
touch "$LOG_FILE"
fi
# 记录日志函数
log() {
echo "$(date +"%Y-%m-%d %H:%M:%S") - $1" >> "$LOG_FILE"
}
# 检查CPU使用率
check_cpu() {
CPU_USAGE=$(top -bn1 | grep "Cpu(s)" | sed "s/.*, *\([0-9.]*\)%* id.*/\1/" | awk '{print 100 - $1}')
if (( $(echo "$CPU_USAGE > $CPU_THRESHOLD" | bc -l) )); then
log "CPU usage is high: $CPU_USAGE%"
echo "CPU usage is high: $CPU_USAGE%" | mail -s "CPU Usage Alert" "$EMAIL"
fi
}
# 检查内存使用率
check_memory() {
MEMORY_USAGE=$(free | grep Mem | awk '{print $3/$2 * 100.0}')
if (( $(echo "$MEMORY_USAGE > $MEMORY_THRESHOLD" | bc -l) )); then
log "Memory usage is high: $MEMORY_USAGE%"
echo "Memory usage is high: $MEMORY_USAGE%" | mail -s "Memory Usage Alert" "$EMAIL"
fi
}
# 检查磁盘使用率
check_disk() {
DISK_USAGE=$(df / | tail -1 | awk '{print $5}' | sed 's/%//')
if (( $DISK_USAGE > $DISK_THRESHOLD )); then
log "Disk usage is high: $DISK_USAGE%"
echo "Disk usage is high: $DISK_USAGE%" | mail -s "Disk Usage Alert" "$EMAIL"
fi
}
# 主循环
while true; do
check_cpu
check_memory
check_disk
sleep 60
done