Wie überprüfe ich, ob bei ssh Fehler aufgetreten sind?

8

Ich schreibe ein Bereitstellungsskript und muss ein Rollback durchführen, wenn Fehler aufgetreten sind.

Z.B:

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

Im Moment, wenn ich dieses Skript ausführe, druckt mkdir es auf meinem Bildschirm aus und setzt die Ausführung fort. Ich muss diesen Fehler abfangen und etwas dagegen unternehmen.

ChocoDeveloper
quelle

Antworten:

6

Der Beendigungsstatus von sshist der Beendigungsstatus des Remote-Befehls. Zum Beispiel

ssh myapp 'exit 42'
echo $?

sollte 42 ausgeben ( $?ist der Beendigungsstatus des zuletzt ausgeführten Befehls).

Eine Möglichkeit ist, sofort zu beenden, wenn das mkdirfehlschlägt:

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

Wenn möglich, ist es wahrscheinlich besser, Remote-Fehler in Ihrem Skript zu beheben.

chepner
quelle
5

Wenn Sie die Fehlermeldung wirklich abfangen müssen, können Sie Folgendes versuchen:

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

Auf diese Weise leiten Sie die Standardfehlerausgabe in die Standardausgabe um und speichern die Ausgabe des Befehls ssh in $result. Wenn Sie nur den Fehlercode / den Beendigungsstatus benötigen, lesen Sie diese Antwort .

speakr
quelle