Как проверить, произошли ли какие-либо ошибки во время SSH?

8

Я пишу сценарий развертывания, и мне нужно откатить, если какие-либо ошибки произошли.

Например:

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

Прямо сейчас, когда я выполняю этот скрипт, если mkdir завершается ошибкой, он печатает его на моем экране и продолжает выполнение. Мне нужно отловить эту ошибку и что-то с ней сделать.

ChocoDeveloper
источник

Ответы:

6

Статусом выхода sshбудет статус выхода удаленной команды. Например

ssh myapp 'exit 42'
echo $?

должен вывести 42 ( $?это состояние выхода последней выполненной команды).

Один из вариантов - выйти сразу, если mkdirпроизойдет сбой:

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

Вероятно, лучше попытаться обработать любые удаленные сбои в вашем скрипте, если это возможно.

chepner
источник
5

Если вам действительно нужно перехватить сообщение об ошибке, вы можете попробовать это:

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

Таким образом вы перенаправляете стандартный вывод ошибок на стандартный вывод и сохраняете вывод команды ssh в $result. Если вам просто нужен код ошибки / статус выхода, посмотрите этот ответ .

speakr
источник