У меня есть сценарий 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!"