如何修复 How to run a bash command until it is successful or …

スポンサーリンク

如何在 Bash 中运行命令直到成功或超时?

错误概述

在运行 Bash 命令时,有时我们需要确保该命令在成功执行之前不断尝试,或者设置一个超时时间。如果命令在超时之前仍未成功执行,程序应该停止尝试并返回错误信息。本文将讨论如何使用 Bash 脚本来实现此功能,即“如何运行一个 bash 命令直到它成功或超时”。

常见原因

  • 网络连接问题:在执行需要网络连接的命令时,如果网络不稳定,可能导致命令失败。
  • 资源未准备就绪:某些命令可能依赖于特定的系统资源或服务,在资源未准备好之前执行会导致失败。
  • 命令参数错误:如果命令的参数不正确,可能导致命令无法成功执行。
  • 权限问题:在某些情况下,执行命令的用户可能没有足够的权限来执行该命令。

解决方法

方法 1: 使用 until 循环和 sleep

这种方法使用 until 循环来不断尝试执行命令,并在每次失败后等待一段时间。

NEXT_WAIT_TIME=0
until (( NEXT_WAIT_TIME == 5 )) || command; do
    sleep "$(( NEXT_WAIT_TIME++ ))"
done
  • 解释
  • NEXT_WAIT_TIME=0:初始化等待时间为0。
  • until (( NEXT_WAIT_TIME == 5 )) || command:当 NEXT_WAIT_TIME 达到5次或者命令成功时,退出循环。
  • sleep "$(( NEXT_WAIT_TIME++ ))":每次命令失败后,暂停一段时间,时间逐次增加。

方法 2: 使用 timeout 命令

如果你想设置一个明确的超时,可以使用 timeout 命令。

timeout 12h bash -c 'until ssh root@mynewvm; do sleep 10; done'
  • 解释
  • timeout 12h:设置超时为12小时。
  • bash -c 'until ssh root@mynewvm; do sleep 10; done':尝试连接到远程服务器,如果失败则每10秒重试一次。

方法 3: 自定义重试函数

可以定义一个通用的重试函数来执行给定的命令,直到成功或达到最大尝试次数。

“`bash

!/bin/bash

retry()

コメント

タイトルとURLをコピーしました