我的shell脚本:
sudo /etc/init.d/haproxy reload
if [ $? -ne 0 ]
then
echo "Fail to reload services."
fi
在服务重启警报时无法捕获错误,如:
[ALERT] 104/005618 (6110) : Starting frontend tinasay: cannot bind socket
如何捕获警报?
答案 0 :(得分:0)
您可以重定向stderr并使用正则表达式:
output=$(sudo /etc/init.d/haproxy reload 2>&1)
if [[ $output =~ "ALERT" ]]; then
echo "Fail to reload services."
fi
答案 1 :(得分:0)
错误消息通常写入文件描述符2,即标准错误。它们可以像这样重定向:
sudo /etc/init.d/haproxy reload 2> /some/log/file.log
这将覆盖该文件,任何现有内容都将丢失。相反,您也可以在追加模式下重定向错误输出:
sudo /etc/init.d/haproxy reload 2>> /some/log/file.log
将在旧邮件之后添加新邮件。
您也不需要像往常一样检查$?
,实际上它是一种经典无用的用法。这样做:
if ! sudo /etc/init.d/haproxy reload 2>> /some/log/file.log ; then
echo "Fail to reload services."
fi
如果返回代码不为0,则将打印“失败”消息。