遇到问题
脚本中 scp 发送文件失败, 导致后续流程未自动进行
如何解决
添加失败重试逻辑: 10次, 间隔30s
retry_command() {
# 获取命令参数
local command="$1"
# 定义重试次数和等待时间
local max_attempts=10
local wait_time=30
# 初始化计数器
local attempt=0
while [ $attempt -lt $max_attempts ]
do
if eval $command; then
# 如果命令执行成功,输出信息并退出循环
echo "Command executed successfully."
break
else
# 如果命令执行失败,则增加计数器并等待一段时间后重试
attempt=$((attempt+1))
echo "Command failed $attempt, Retrying in $wait_time seconds..."
sleep $wait_time
fi
done
# 如果达到最大重试次数,输出错误信息
if [ $attempt -eq $max_attempts ]; then
echo "Command failed after $max_attempts attempts."
fi
}
# 调用函数,传入要执行的命令作为参数
retry_command "scp xxx.ok user@remote_host:/home/"
知识点
- local : 局部变量只在定义它们的函数内部可见, 不会影响到函数外部的同名变量
- eval : 将字符串作为命令来执行, 达到在函数中动态执行不同命令的效果
- break : 跳出当前循环, return 跳出函数