Por que o script sh da implementação não falha no nginx com falha?

1

Eu tenho o script sh que reinicia o nginx da seguinte forma:

#!/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!"

Mas meu problema é que o script continua o evento de execução em um erro de caso como Reloading nginx configuration nginx [fail] e alcança Deployment Done! echo. Parece que o case é sempre true .

Então, como posso parar de executar o script bash se o recarregamento do nginx falhar?

    
por Erik 27.10.2014 / 22:01

1 resposta

2

Substitua exit 1 por return e insira uma linha antes de fi com exit 1 .

Atualização:

Tente isso com um grep do GNU:

#!/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!"
    
por 27.10.2014 / 22:10