【发布时间】:2015-09-25 17:28:10
【问题描述】:
是否有让 Bash 重试 SFTP 连接 n 次或 x 秒的选项?无论错误原因如何(服务器关闭、密码错误等),我都找不到任何有关使 shell 脚本自动重试的信息。
【问题讨论】:
是否有让 Bash 重试 SFTP 连接 n 次或 x 秒的选项?无论错误原因如何(服务器关闭、密码错误等),我都找不到任何有关使 shell 脚本自动重试的信息。
【问题讨论】:
你可以使用until循环。
STAT=1
until [ $STAT -eq 0 ]; do
sftp user@host
STAT=$?
done
上述语法将一直持续到 sftp 成功,如果您需要一定次数,则可以使用带有计数器的 while 循环。
counter=1
while [ $counter -gt 0 ]; do
sftp user@host
counter=$(($counter-1))
done
【讨论】:
试试这个试试3次:
c=0; until sftp user@server; do ((c++)); [[ $c -eq 3 ]] && break; done
带有错误消息的长版本:
c=0
until sftp user@server; do
((c++))
if [[ $c -eq 3 ]]; then
echo error
break
fi
done
【讨论】:
if [[$? != 0 ]]; then echo 'error'; exit 100; fi; 时,没有发现错误
; [[ $c -eq 3 ]] && echo error 或将break 替换为echo error && break。
sftp 命令之后运行该 if 语句。所以我最终做了if [[ $c -eq 3 ]]; then echo 'error'; fi;。您会建议这样做,还是将 if 语句放入 sftp 连接行?
return $?的函数中,并在其中使用它