로그에 새로 추가된 내용을 처리하는 방법

로그에 새로 추가된 내용을 처리하는 방법

점점 늘어나는 로그 파일에 대한 최신 추가 사항을 확인하는 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]$

관련 정보