増え続けるログファイルへの最新の追加を確認する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]$