Jak sprawdzić, czy wystąpiły jakieś błędy podczas ssh?

8

Piszę skrypt wdrażania i muszę wycofać, jeśli wystąpią jakiekolwiek błędy.

Na przykład:

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

Właśnie teraz, kiedy wykonuję ten skrypt, jeśli mkdir zawiedzie, drukuje go na ekranie i kontynuuje wykonywanie. Muszę złapać ten błąd i coś z tym zrobić.

ChocoDeveloper
źródło

Odpowiedzi:

6

Statusem wyjścia sshbędzie status wyjścia polecenia zdalnego. Na przykład

ssh myapp 'exit 42'
echo $?

powinien wypisać 42 ( $?to status wyjścia ostatniego wykonanego polecenia).

Jedną z opcji jest natychmiastowe wyjście, jeśli się mkdirnie powiedzie:

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

Prawdopodobnie lepiej jest spróbować poradzić sobie ze zdalnymi awariami w skrypcie, jeśli to możliwe.

chepner
źródło
5

Jeśli naprawdę potrzebujesz złapać komunikat o błędzie , możesz spróbować:

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

W ten sposób przekierowujesz standardowe wyjście błędów na standardowe wyjście i zapisujesz dane wyjściowe polecenia ssh w $result. Jeśli potrzebujesz tylko kodu błędu / statusu wyjścia, zapoznaj się z tą odpowiedzią .

mówca
źródło