Come verificare se si sono verificati errori durante ssh?


8

Sto scrivendo uno script di distribuzione e devo eseguire il rollback in caso di errori.

Per esempio:

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

In questo momento quando eseguo questo script, se mkdir fallisce, lo stampa sul mio schermo e continua l'esecuzione. Devo rilevare quell'errore e fare qualcosa al riguardo.

Risposte:


6

Lo stato di uscita sshsarà lo stato di uscita del comando remoto. Per esempio

ssh myapp 'exit 42'
echo $?

dovrebbe stampare 42 ( $?è lo stato di uscita dell'ultimo comando eseguito).

Un'opzione è quella di uscire immediatamente se mkdirfallisce:

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

Probabilmente è meglio provare a gestire eventuali errori remoti nello script, se possibile.


5

Se hai davvero bisogno di catturare il messaggio di errore puoi provare questo:

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

In questo modo si reindirizza l'output dell'errore standard sull'output standard e si salva l'output del comando ssh $result. Se hai solo bisogno del codice di errore / stato di uscita, vedi questa risposta .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.