Como verificar se ocorreu algum erro durante o ssh?


8

Estou escrevendo um script de implantação e preciso reverter se ocorrer algum erro.

Por exemplo:

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

Agora, quando executo esse script, se o mkdir falhar, ele será impresso na minha tela e continuará a execução. Eu preciso pegar esse erro e fazer algo sobre isso.

Respostas:


6

O status de saída de sshserá o status de saída do comando remoto. Por exemplo

ssh myapp 'exit 42'
echo $?

deve imprimir 42 ( $?é o status de saída do último comando executado).

Uma opção é sair imediatamente se a mkdirfalha:

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

Provavelmente, é melhor tentar lidar com falhas remotas no seu script, se possível.


5

Se você realmente precisar receber a mensagem de erro, tente:

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

Com isso, você redireciona a saída de erro padrão para a saída padrão e salva a saída do comando ssh em $result. Se você apenas precisar do código de erro / status de saída, consulte esta resposta .

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.