これは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
...