ログに新しく追加されたコンテンツを処理する方法

ログに新しく追加されたコンテンツを処理する方法

増え続けるログファイルへの最新の追加を確認するtailなどのツールを使用できることがわかります。lessしかし、私がやりたいことは、追加されたcronコンテンツに対して一種のスクリプト(たとえば)を定期的に実行することです。新しい追加、1行、または複数行の追加を処理できる必要があります。

難しい部分は処理された内容を追跡することであるため、最後の確認以降に新しい内容だけがわかります。これは、ログを新しいファイルにローリングすることを検討することをお勧めします。

そのためのツールはありますか?

ベストアンサー1

OPが言ったように

これはしなければならない最大レコードは新しいファイルアカウントにロールバックされます。

(「最高」に注目)これまでに他の答えはなく、私が考える限り、ログの回転は含まれません。これは「十分に良い」解決策だと思い、少なくとも質問のタイトルに答えます。

input.txtという名前の入力ファイルがあるとし、入力ファイルをパラメータとして使用して、最後の呼び出し以降に新しい行のみを出力するスクリプトを作成しました。ここでは、(やや原始的な)スクリプトとその動作を説明します。

[user@system test]$ ll
insgesamt 8
-rwxrwxr-x 1 user user 304 30. Jan 11:33 find-new-lines
-rw-rw-r-- 1 user user   6 30. Jan 10:42 input.txt
[user@system test]$ cat find-new-lines
#!/bin/bash

# We need last line count. Assume 0 on first run.
if [ ! -f "$1-last-lines-count.txt" ]; then
   echo 0 > $1-last-lines-count.txt
fi
# Find current line count
wc -l $1 | cut -d' ' -f1 > $1-current-lines-count.txt
# Find number of new lines, if any
expr `cat $1-current-lines-count.txt` - `cat $1-last-lines-count.txt` > $1-new-lines-count.txt
# Save current line count for next call
mv -f $1-current-lines-count.txt $1-last-lines-count.txt
# Output only new lines, if any
tail -`cat $1-new-lines-count.txt` $1
[user@system test]$ cat input.txt
a
b
c
[user@system test]$ ./find-new-lines input.txt
a
b
c
[user@system test]$ ll
insgesamt 16
-rwxrwxr-x 1 user user 304 30. Jan 11:33 find-new-lines
-rw-rw-r-- 1 user user   6 30. Jan 10:42 input.txt
-rw-rw-r-- 1 user user   2 30. Jan 12:30 last-lines-count-input.txt
-rw-rw-r-- 1 user user   2 30. Jan 12:30 new-lines-count-input.txt
[user@system test]$ ./find-new-lines input.txt
[user@system test]$

おすすめ記事