如何处理 bash 脚本中 ssh 命令引起的挂起?

如何处理 bash 脚本中 ssh 命令引起的挂起?

我正在分布式 Linux 系统上工作。在我的 bash 脚本中,我想 grep 的输出:

ssh $ipaddress ibstat

如果机器宕机,上面的命令将会挂起。如何处理挂起并以非零值退出 bash 脚本?

答案1

使用ConnectTimeOut较低值的选项,您可能需要根据您的特定环境进行调整:

$ ssh -o ConnectTimeout=2 $ipaddress
ssh: connect to host 192.168.123.123 port 22: Connection timed out
$ echo $?
255

您甚至可以获得一个可以测试的返回值 -255意味着处理命令时发生错误。

答案2

timeout实用程序可能是您的选择:

timeout 5 ssh $ipaddress ibstat

将在 5 秒后以非零结果退出,将其设置为足以让 ibstat 完成的合理值

答案3

您可以先尝试检查主机可用性:

if ping -c 1 $ipaddress &> /dev/null
then
  ssh $ipaddress ibstat
else
  exit 1
fi

相关内容