如何检查 ssh 期间是否发生任何错误?

如何检查 ssh 期间是否发生任何错误?

我正在编写部署脚本,如果发生任何错误,我需要回滚。

例如:

#!/bin/bash
ssh myapp '
    mkdir /some/dir
    # check if above command failed, and execute rollback script if needed
'
# or maybe do it from here?

现在,当我执行此脚本时,如果 mkdir 失败,它会将其打印在我的屏幕上并继续执行。我需要捕获该错误并采取一些措施。

答案1

的退出状态ssh将是远程命令的退出状态。例如

ssh myapp 'exit 42'
echo $?

应该打印 42 ($?是最后执行的命令的退出状态)。

如果失败,一种选择是立即退出mkdir

ssh myapp 'mkdir /some/dir || exit 42; do-more-stuff'
if [[ $? = 1 ]]; then
   echo "Remote mkdir failed"
fi

如果可能的话,最好尝试处理脚本中的任何远程故障。

答案2

如果你真的需要赶上错误信息你可以尝试这个:

#!/bin/bash
result=`ssh myapp 'mkdir /some/dir' 2>&1`
if [[ -n $result ]]; then
    echo "the following error occurred: $result"
fi

通过这种方式,你可以将标准错误输出重定向到标准输出,并将 ssh 命令的输出保存到$result。如果你只需要错误代码/退出状态,请参阅这个答案

相关内容