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 завершается ошибкой, он печатает его на моем экране и продолжает выполнение. Мне нужно отловить эту ошибку и что-то с ней сделать.

2 ответа2

5

Состояние выхода 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

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

5

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

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

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

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .