MST
星途 面试题库

面试题:Bash定时任务的故障处理与优化

在一个生产环境中,有一组基于Bash的定时任务,这些任务依赖于网络服务。有时网络不稳定会导致任务执行失败。请设计一个方案,使定时任务在网络故障恢复后能够自动重试,并且在多次重试失败后发送详细的错误报告到指定邮箱,同时优化定时任务的执行效率以减少对系统资源的占用。阐述整体思路并给出关键代码片段。
48.0万 热度难度
编程语言Bash

知识考点

AI 面试

面试题答案

一键面试

整体思路

  1. 检测网络连接:在定时任务脚本开始时,使用命令(如 ping)检测网络连接。如果网络不可用,进入重试逻辑。
  2. 重试机制:设置最大重试次数和重试间隔时间,每次重试失败后等待一段时间再重试。
  3. 错误报告:多次重试失败后,收集任务执行的详细错误信息(如标准输出和标准错误输出),并通过邮件发送到指定邮箱。
  4. 优化执行效率:减少不必要的操作,如只在需要时进行网络检测,避免频繁检测网络。

关键代码片段

#!/bin/bash

# 网络检测函数
check_network() {
    ping -c 1 8.8.8.8 &> /dev/null
    return $?
}

# 最大重试次数
max_retries=5
# 重试间隔时间(秒)
retry_interval=10

# 执行定时任务函数
run_task() {
    # 这里替换为实际的定时任务命令
    your_task_command &> task_output.log
    return $?
}

# 主逻辑
for (( i=0; i<$max_retries; i++ )); do
    if check_network; then
        if run_task; then
            # 任务成功,退出重试循环
            exit 0
        else
            echo "Task failed on attempt $((i + 1)). Retrying in $retry_interval seconds..."
            sleep $retry_interval
        fi
    else
        echo "Network is down. Retrying in $retry_interval seconds..."
        sleep $retry_interval
    fi
done

# 多次重试失败,发送错误报告邮件
echo "Task failed after $max_retries attempts. Sending error report."
mail -s "定时任务失败报告" your_email@example.com < task_output.log