Monitoring
每次擷取特定字元串並發送通知
這是 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 ...