MST

星途 面试题库

面试题:Bash脚本的复杂逻辑与系统交互

编写一个Bash脚本,实现一个简单的系统监控功能。脚本需要实时监控系统的CPU使用率、内存使用率和磁盘空间使用率。如果任何一项指标超过预设阈值(CPU使用率80%,内存使用率80%,磁盘空间使用率90%),则通过邮件(假设已配置好邮件发送环境,可使用mail命令)向管理员发送警报信息,包括当前系统各项指标的具体数值。脚本需能持续运行,每隔5分钟检查一次系统状态,并且要处理在运行过程中可能出现的各种异常情况,例如获取系统指标失败等。请详细注释脚本的每一步操作。
42.7万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/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