Як перевірити, чи виникли помилки під час 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 не працює, він друкує його на екрані і продовжує виконання. Мені потрібно зловити цю помилку і щось зробити.

Відповіді:


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

Напевно, краще спробувати вирішити будь-які віддалені збої у вашому сценарії, якщо це можливо.


5

Якщо вам дійсно потрібно ввести повідомлення про помилку, ви можете спробувати це:

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

Цим ви переспрямовуєте стандартний вихід помилки на стандартний вихід і зберігаєте вихід команди ssh $result. Якщо вам просто потрібен код помилки / статус виходу, дивіться цю відповідь .

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.