Monitoring

每次擷取特定字元串並發送通知

  • March 27, 2016

這是 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

它總是給出 0 值,即使它沒有擷取字元串。這使得 if 條件每次都在循環執行時發送通知。

現在我的問題是:還有其他選擇嗎?每次擷取字元串時都會通過電子郵件通知?

“它總是給出 0 值”,因為這是管道中最後一個命令的退出程式碼 - sed,即使沒有發生替換,它也會成功(返回 0)。

設置**pipefail**選項將使管道的結果設置為管道中第一個失敗命令的結果(如果有)。通過在呼叫 logtail 之前設置該選項來修改您的腳本:

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

引用自:https://unix.stackexchange.com/questions/272470