我的外壳脚本:
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
我怎样才能抓住那个警报?
错误消息通常写入文件描述符 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,则将打印“失败”消息。
您可以重定向标准错误并使用正则表达式:
output=$(sudo /etc/init.d/haproxy reload 2>&1)
if [[ $output =~ "ALERT" ]]; then
echo "Fail to reload services."
fi