하루에 한 번 롤링되는 500MB 파일을 tail -f하는 방법은 무엇입니까?

하루에 한 번 롤링되는 500MB 파일을 tail -f하는 방법은 무엇입니까?

로그 파일의 패턴을 모니터링하기 위해 다음을 수행하고 싶습니다.

tail -f ./app.log | grep "My Pattern: .*" >> ./MyPattern.txt &

이는 500MB에 도달할 때까지 잘 작동하며 app.log, 이동되고 app-2015-10-28.0.log새 파일이 생성됩니다. app.log이런 일이 발생하면 tail -f작동이 중지됩니다. 동일한 명령을 중지했다가 다시 실행하면 작동하지만 중지와 시작, 다시 시작 사이에 발생한 패턴이 손실될 수 있습니다.

스크롤의 또 다른 조건은 00:00입니다. 로그가 500MB보다 작은 경우에도 동일한 롤링이 발생합니다.

로그 롤링은 애플리케이션 수준에서 수행되며 우리는 해당 부분을 제어할 수 없습니다.

관심 있는 패턴을 놓치지 않고 로그가 롤링되었는지 어떻게 감지할 수 있나요?

답변1

tail--follow=descriptor일반적 으로 로그 파일이 롤링되거나 파일이 이동될 때 액세스할 수 없게 되는 파일 설명자( )가 뒤에옵니다 . 맨페이지에서 이를 확인할 수 있습니다 tail.

- 재시도

파일에 액세스할 수 없거나 액세스할 수 없게 된 경우에도 파일을 계속 열려고 시도합니다. 즉, --follow=name을 사용하면 유용합니다.

따라서 다음과 같이 사용하십시오( tail이제 설명자 대신 이름이 뒤에 옵니다).

tail --follow=name --retry logfile | grep "pattern"

파일이 잘리거나 이동되면 tails 출력에 다음이 표시됩니다.

$ tail --follow=name --retry logfile
[...]
tail: logfile: file truncated
[...]
tail: `logfile' has become inaccessible: No such file or directory
tail: `logfile' has appeared;  following end of new file
[...]

관련 정보