Centos

檢查郵件是否已經到達,如果沒有則提醒

  • January 16, 2017

我在 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以將電子郵件發送給您。將它與日誌輪換腳本結合執行是有意義的,這樣您就可以同時存檔和處理最新的日誌文件(至少大致如此)。那麼就不需要解析日誌文件中的時間戳等;此日誌文件中的任何內容都適用於您感興趣的時間段。

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