MST
星途 面试题库

面试题:Bash脚本实现复杂系统监控与自动化处理

编写一个Bash脚本,用于监控系统内存使用率。当内存使用率超过80%时,自动清理系统缓存(假设系统支持通过命令'sudo sync; sudo sysctl vm.drop_caches=3'清理缓存),并将每次监控的内存使用率和处理情况记录到日志文件中。同时要处理脚本执行过程中的各种异常情况,如权限不足等,并给出合理的提示信息。
26.4万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试
#!/bin/bash

log_file="memory_monitor.log"

function log_message {
    local message=$1
    echo "$(date '+%Y-%m-%d %H:%M:%S') - $message" >> $log_file
}

function check_memory_usage {
    local mem_usage=$(free -h | awk 'NR==2{printf "%.2f%%", ($3/$2)*100}')
    log_message "当前内存使用率: $mem_usage"
    if (( $(echo "$mem_usage > 80" | bc -l) )); then
        log_message "内存使用率超过80%,尝试清理系统缓存"
        if sudo sync; then
            if sudo sysctl vm.drop_caches=3; then
                log_message "系统缓存清理成功"
            else
                log_message "清理系统缓存时,sysctl命令执行失败"
            fi
        else
            log_message "清理系统缓存时,sync命令执行失败,可能权限不足"
        fi
    else
        log_message "内存使用率未超过80%,无需清理缓存"
    fi
}

trap 'log_message "脚本意外终止"; exit 1' SIGTERM SIGINT

if [ -w $log_file ] || [ -z $log_file ]; then
    check_memory_usage
else
    log_message "日志文件 $log_file 不可写,无法记录日志"
    echo "日志文件 $log_file 不可写,无法记录日志"
fi

上述脚本功能如下:

  1. 监控内存使用率:通过free -h命令获取内存使用信息,并计算内存使用率。
  2. 缓存清理:当内存使用率超过80%时,执行sudo sync; sudo sysctl vm.drop_caches=3命令清理系统缓存。
  3. 日志记录:每次监控的内存使用率和处理情况都会记录到memory_monitor.log日志文件中。
  4. 异常处理
    • 使用trap捕获SIGTERMSIGINT信号,在脚本意外终止时记录日志。
    • 检查日志文件是否可写,若不可写则记录错误日志并给出提示。
    • 在执行sudo命令清理缓存时,若命令执行失败,记录相应错误信息。