面试题答案
一键面试#!/bin/bash
while true; do
# 获取CPU使用率
cpu_usage=$(top -bn1 | grep "Cpu(s)" | awk '{print $2 + $4}')
# 获取内存使用率
mem_usage=$(free -h | awk 'NR==2{printf "%.2f%%", ($3/$2)*100}')
# 获取磁盘剩余空间
disk_free=$(df -h / | awk 'NR==2{print $4}' | sed 's/G//')
if (( $(echo "$cpu_usage > 80" | bc -l) && $(echo "$mem_usage > 70%" | bc -l) )); then
message="CPU使用率: $cpu_usage%\n内存使用率: $mem_usage"
if (( $(echo "$disk_free < 10" | bc -l) )); then
message="$message\n磁盘剩余空间: $disk_free GB"
fi
echo -e $message | sendmail -v admin@example.com
elif (( $(echo "$disk_free < 10" | bc -l) )); then
message="磁盘剩余空间: $disk_free GB"
echo -e $message | sendmail -v admin@example.com
fi
sleep 300 # 每隔5分钟检查一次
done
解释:
while true
循环确保脚本持续运行。- 使用
top -bn1
获取实时CPU使用率,free -h
获取内存使用率,df -h /
获取根分区的磁盘剩余空间。 - 通过
bc
进行数值比较,判断CPU和内存使用率是否超过阈值,以及磁盘剩余空间是否小于10GB。 - 构建邮件内容并通过
sendmail
发送邮件。 sleep 300
使脚本每5分钟(300秒)执行一次检查。