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

stderr をリダイレクトして、正規表現を使用できます。

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 に答える
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 に答える