【问题标题】:How do I automatically retry an SFTP connection attempt?如何自动重试 SFTP 连接尝试?
【发布时间】:2015-09-25 17:28:10
【问题描述】:

是否有让 Bash 重试 SFTP 连接 n 次或 x 秒的选项?无论错误原因如何(服务器关闭、密码错误等),我都找不到任何有关使 shell 脚本自动重试的信息。

【问题讨论】:

    标签: bash sftp


    【解决方案1】:

    你可以使用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
    

    【讨论】:

      【解决方案2】:

      试试这个试试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。附加; [[ $c -eq 3 ]] && echo error 或将break 替换为echo error && break
      • 我在完整的 sftp 命令之后运行该 if 语句。所以我最终做了if [[ $c -eq 3 ]]; then echo 'error'; fi;。您会建议这样做,还是将 if 语句放入 sftp 连接行?
      • 如何使用heredoc 执行此操作?我正在努力将 heredoc 添加到 sftp 连接线的末尾
      • 对于heredoc(或其他复杂行为),我会将sftp调用放在一个带有return $?的函数中,并在其中使用它
      猜你喜欢
      • 2019-10-04
      • 1970-01-01
      • 2012-11-26
      • 1970-01-01
      • 2016-03-28
      • 2022-12-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多