私のシェルスクリプト:
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
どうすればそのアラートをキャッチできますか?
stderr をリダイレクトして、正規表現を使用できます。
output=$(sudo /etc/init.d/haproxy reload 2>&1)
if [[ $output =~ "ALERT" ]]; then
echo "Fail to reload services."
fi
エラーメッセージは通常、ファイル記述子 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 でない場合、「失敗」メッセージが出力されます。