毎回特定の文字列をキャプチャして通知を送信します。

毎回特定の文字列をキャプチャして通知を送信します。

これはbashのスクリプトです。ここ

リアルタイム動的ログファイルから「エラー:TCP接続が削除されました」という文字列をキャプチャします。次のログデータの例を含むログファイル「TcpRcpt.log」の名前は次のとおりです。


SAT Mar 26 19:55:37  2016 TCPRcpt-0297--ERROR: your TCP- connection is dead.
SAT Mar 26 19:55:37  2016 TCPRcpt-0297--RUNNING
SAT Mar 26 19:55:37  2016 TCPRcpt-0297--RUNNING
SAT Mar 26 19:55:37  2016 TCPRcpt-0298--ERROR: your TCP- connection is dead.

今ステップを発行してください。 logtail TcpRcpt.log | grep -m 1 "ERROR: your TCP- connection is dead." | sed 's/.*TCPRcpt-/ PID /;s/ -//' >> LOGFILE.LOG

文字列をキャプチャできない場合でも、常にゼロ値を提供します。これにより、ループが実行されるたびに if 条件が通知を送信します。

今私の質問は:他のオプションはありますか?文字列がキャプチャされるたびに電子メールで通知を送信しますか?

ベストアンサー1

「常にゼロの値を提供します。」これはパイプラインの最後のコマンドであるsedの終了コードであるため、置換が発生しなくても成功(0を返す)します。

環境パイプ故障オプションは、パイプラインの結果をパイプラインの最初の失敗したコマンド(存在する場合)の結果に設定します。 logtailを呼び出す前に、このオプションを設定してスクリプトを変更してください。

    ...
    set -o pipefail
    logtail TcpRcpt.log | grep -m 1 "ERROR: your TCP- connection is dead." | sed 's/.*TCPRcpt-/ PID /;s/ -//' >> LOGFILE.LOG
    ...

おすすめ記事