1

我的外壳脚本:

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

我怎样才能抓住那个警报?

4

2 回答 2

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,则将打印“失败”消息。

于 2012-04-13T17:44:02.577 回答
0

您可以重定向标准错误并使用正则表达式:

output=$(sudo /etc/init.d/haproxy reload 2>&1)
if [[ $output =~ "ALERT" ]]; then
  echo "Fail to reload services."
fi
于 2012-04-13T17:10:43.997 回答