整体思路
- 检测网络连接:在定时任务脚本开始时,使用命令(如
ping
)检测网络连接。如果网络不可用,进入重试逻辑。
- 重试机制:设置最大重试次数和重试间隔时间,每次重试失败后等待一段时间再重试。
- 错误报告:多次重试失败后,收集任务执行的详细错误信息(如标准输出和标准错误输出),并通过邮件发送到指定邮箱。
- 优化执行效率:减少不必要的操作,如只在需要时进行网络检测,避免频繁检测网络。
关键代码片段
#!/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