为什么部署 sh 脚本在 nginx 重新加载失败时不会失败?

为什么部署 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

那么,如果 nginx 重新加载失败,我该如何停止执行 bash 脚本?

答案1

替换exit 1为并在return之前插入一行。fiexit 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!"

相关内容