SSH中にエラーが発生したかどうかを確認するにはどうすればよいですか?


8

展開スクリプトを書いていて、エラーが発生した場合はロールバックする必要があります。

例えば:

#!/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が失敗した場合、画面に出力されて実行が続行されます。私はそのエラーをキャッチし、それについて何かをする必要があります。

回答:


6

の終了ステータスはssh、リモートコマンドの終了ステータスになります。例えば

ssh myapp 'exit 42'
echo $?

42を出力する必要があります($?最後に実行されたコマンドの終了ステータスです)。

1つのオプションは、mkdir失敗した場合にすぐに終了することです。

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

可能であれば、スクリプト内のリモート障害を処理することをお勧めします。


5

あなたが本当にエラーメッセージをキャッチする必要があるなら、これを試すことができます:

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

これにより、標準エラー出力を標準出力にリダイレクトし、sshコマンドの出力をに保存します$result。エラーコード/終了ステータスだけが必要な場合は、この回答を参照してください。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.