Centos
檢查郵件是否已經到達,如果沒有則提醒
我在 CentOS 上使用 fetchmail 和 procmail 進行郵件過濾,其中我的郵件包含各種日誌消息。他們為我服務,所以我可以在我的郵件(日誌)中搜尋錯誤字元串。那麼有沒有人知道我如何檢查一封郵件是否失去,因為我每天都有固定數量的郵件發送給我,如果伺服器崩潰顯然它不會發送郵件,我如何確定郵件是否是否失去,如果要通過電子郵件發送警報?
當我使用 fetchmail 收到郵件並使用 procmail 處理它時,我需要查看
procmail.log
文件,以便確定某個郵件是否尚未到達。我的日誌文件如下所示:From root1@example1.com Wed Dec 31 10:38:49 2014 Subject: example1 -> Incremental 1 -> DEV backup Folder: /dev/null 235603 From root2@example2.yu Wed Dec 31 10:38:50 2014 Subject: example2 Folder: /dev/null 5983 From root3@example3.yu Wed Dec 31 10:38:50 2014 Subject: example3 -> Full Offline Backup DEV Folder: /dev/null 40978 From xenbackup@example4.rs Wed Dec 31 10:38:50 2014 Subject: [OK] [ example4] Folder: /dev/null
所以這些郵件是在一天內收到的,並且它們必須在某個時間出現,當我需要檢查每封郵件是否都到達時(存在於日誌文件中)。現在我需要一種方法來查看這些郵件中的每一個是否都存在於日誌中。並且可以僅通過 from 行進行搜尋。
您可以執行某種定期日誌分析器來驗證您是否已收到您希望收到的所有內容。也許是這樣的。
awk 'BEGIN { e="root1@example1.com:root2@example2.yu:root3@example3.yu:xenbackup@example4.rs"; split(e, expected, /:/) } /^From / { seen[$2]++ } END { for (x in expected) if (!(expected[x] in seen)) print expected[x] " missing" } ' Mail/procmail.log
確保你有一個你想要檢查的時間段的日誌(過去 24 小時?)並將其傳遞給這個腳本。如果缺少“預期”記錄之一,它將發出警報。
該腳本只是查找每個
From
日誌行的第二個欄位並將其提取到seen
. 最後,如果有記錄expected
不在seen
,則為每個記錄發出警報消息。如果腳本生成任何輸出,您可以執行它
crontab
以將電子郵件發送給您。將它與日誌輪換腳本結合執行是有意義的,這樣您就可以同時存檔和處理最新的日誌文件(至少大致如此)。那麼就不需要解析日誌文件中的時間戳等;此日誌文件中的任何內容都適用於您感興趣的時間段。