メールが届いたことを確認し、届かない場合は通知を送信します。

メールが届いたことを確認し、届かない場合は通知を送信します。

私は私のメールにさまざまなログメッセージが含まれているCentOSでメールフィルタリングのためにprocmailでfetchmailを使用しています。彼らは私のメッセージ(ログ)からエラー文字列を検索するのに役立ちます。毎日私に送信されるメールの数が固定されており、サーバーがクラッシュしてもメールを送信しないので、メールが欠落しているかどうかを確認する方法を知っている人はいますか?メールが欠落していることをどのように確認できますか?電子メールアラームを介して送信された場合?

procmail.logfetchmailを使用してメールをインポートし、procmailを使用してメールを処理するときに特定のメールがまだ到着していないことを確認するには、ファイルを調べる必要があります。私のログファイルは次のとおりです。

From [email protected]  Wed Dec 31 10:38:49 2014
 Subject: example1 -> Incremental 1 -> DEV backup
  Folder: /dev/null                                                      235603
From [email protected]  Wed Dec 31 10:38:50 2014
 Subject: example2
  Folder: /dev/null                                                        5983
From [email protected]  Wed Dec 31 10:38:50 2014
 Subject: example3 -> Full Offline Backup DEV
  Folder: /dev/null                                                       40978
From [email protected]  Wed Dec 31 10:38:50 2014
 Subject: [OK] [ example4]
  Folder: /dev/null

したがって、これらのメールは1日以内に受信され、各メールが到着したことを確認する必要がある特定の時間に到着する必要があります(ログファイルにあります)。今、これらのメッセージがログにあるかどうかを確認する方法が必要です。そしてfrom行でのみ検索が可能です。

ベストアンサー1

一種の定期的なログアナライザを実行して、受信する予定のすべてのエントリを受信して​​いることを確認できます。たぶんそうかもしれません。

awk 'BEGIN {
      e="[email protected]:[email protected]:[email protected]:[email protected]";
      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各ログ行の2番目のフィールドを見つけて抽出します。最後に にないレコードがseenある場合、各レコードについて警告メッセージが表示されます。expectedseen

crontabスクリプトが出力を生成する場合は、このコマンドを実行して電子メールを受信できます。最新のログファイルを同時に(少なくとも大まかに)アーカイブして処理できるように、ログ循環スクリプトと一緒に実行することをお勧めします。これにより、タイムスタンプなどを確認するためにログファイルを解析する必要がなくなります。このログファイルの内容はすべて興味のある期間です。

おすすめ記事