¿Cómo verificar si se produjo algún error durante ssh?

8

Estoy escribiendo una secuencia de comandos de implementación y necesito revertir si se produjo algún error.

P.ej:

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

En este momento, cuando ejecuto este script, si mkdir falla, lo imprime en mi pantalla y continúa la ejecución. Necesito detectar ese error y hacer algo al respecto.

ChocoDeveloper
fuente

Respuestas:

6

El estado de salida de sshserá el estado de salida del comando remoto. Por ejemplo

ssh myapp 'exit 42'
echo $?

debe imprimir 42 ( $?es el estado de salida del último comando ejecutado).

Una opción es salir de inmediato si mkdirfalla:

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

Probablemente sea mejor tratar de manejar cualquier falla remota en su script, si es posible.

chepner
fuente
5

Si realmente necesita captar el mensaje de error , puede intentar esto:

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

Con esto, redirige la salida de error estándar a la salida estándar y guarda la salida del comando ssh en $result. Si solo necesita el código de error / estado de salida, consulte esta respuesta .

hablador
fuente