1

ログファイル(メールログ)から特定の文字列(ドメイン名)の出現回数を1時間ごとにカウントするスクリプトを作成し、1時間あたりのメール送信数を確認したいと考えています。

ファイル内のスクリプトを検索し (grep など)、行を数える (wc -l など) 簡単でさまざまな方法があることは知っていますが、1 時間ごとに実行する方法がわかりません。

はい、cronジョブを介して60分ごとにスクリプトを呼び出すことができますが、これはログファイルを最初からスクリプトが実行された瞬間まで読み取ります..過去60分間に作成された行ではなく、方法がわかりませんこれを克服するために。

ノート:

ドメインごとに送信されたすべての電子メールを表示するために使用しているコマンドは次のとおりです。

\# cat /usr/local/psa/var/log/maillog | grep -i qmail-remote-handlers \
| grep from | awk {' print $6 '} | gawk -F@ '{ print $2 }' \
| sort | uniq -c | sort -n | tail

結果は次のようになります。

      8 domain1.tld
     45 domain34.tld
    366 domain80948.tld
etc etc
4

1 に答える 1

0

質問の主なポイントは次のとおりです。

Yes I can call the script every 60 minutes via a cron job but this would read the log file
from the beginning till the moment the script was executed..and not the lines made in the
last 60 minutes, and I don't know how to overcome this.

どうすれば問題を解決できますか?

  1. ログファイルを処理した時点で、行数をログファイルに保存できます。その後、 を使用してこれらの行をスキップしsedます。
  2. 1 と同じですが、処理されたファイルのバイト数を保存します。を使用してスキップしddます。
  3. 処理後にファイルをローテーション (名前変更) することができます (この方法には、ログ処理を行うためにシステムを再構成する必要があるという欠点があります)。

個人的には方法 2 を選択します。これは非常に効率的で、実装が非常に簡単です。

于 2013-03-24T09:36:29.210 に答える