デプロイメントスクリプトを作成していますが、エラーが発生した場合はロールバックする必要があります。
例えば:
#!/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が失敗すると、画面に出力されて実行が続行されます。私はそのエラーを見つけて、それについて何かをする必要があります。
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
可能であれば、スクリプト内のリモート障害を処理することをお勧めします。
エラーメッセージを本当にキャッチする必要がある場合は、これを試すことができます:
#!/bin/bash
result=`ssh myapp 'mkdir /some/dir' 2>&1`
if [[ -n $result ]]; then
echo "the following error occurred: $result"
fi
これにより、標準エラー出力を標準出力にリダイレクトし、sshコマンドの出力を$result
に保存します。エラーコード/終了ステータスだけが必要な場合は、 この回答 を参照してください。