Назад | Перейти на главную страницу

Почему сценарий развертывания sh не дает сбой при неудачной перезагрузке nginx?

У меня есть сценарий sh, который перезапускает nginx следующим образом:

#!/bin/sh -e

set -e

error_exit() {
    d=$(date '+%D %T :: ')
    echo "$d Error: $*" >&2

    exit 1
}

if ! sudo service nginx reload
then        
    # Exit with error
    error_exit "Could not reload nginx"
fi

echo "Deployment Done!"

Но моя проблема в том, что сценарий продолжает выполнение события в случае ошибки, например Reloading nginx configuration nginx [fail] и достигает Deployment Done! эхо. Кажется, если случай всегда true.

Итак, как я могу остановить выполнение сценария bash, если перезагрузка nginx не удалась?

Заменить exit 1 по return и вставьте строку перед fi с участием exit 1.

Обновить:

Попробуйте это с помощью GNU grep:

#!/bin/sh -e

set -e

error_exit() {
    d=$(date '+%D %T :: ')
    echo "$d Error: $*" >&2

    exit 1
}

out="$(sudo service nginx reload 2>&1 | grep -o fail || true)"  # new
if [ "x$out" = "xfail" ]                                        # modified
then
    # Exit with error
    error_exit "Could not reload nginx"
fi

echo "Deployment Done!"