我有一个 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
之前插入一行。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!"