후속 테일이 이전 파일에서 새 파일로 언제 이동되는지 확인하는 방법

후속 테일이 이전 파일에서 새 파일로 언제 이동되는지 확인하는 방법

그래서 저는 tail -F(또는 tail --follow=filename)를 사용하고 있습니다. 이제 광고된 대로 작동하며 롤오버가 발생하면 새 파일로 이동됩니다.

이것은 훌륭하며 내 로그를 추적하는 데 도움이 됩니다. 문제는 tail이 이전 파일에서 새 파일로 언제 이동되는지 알고 싶다는 것입니다.

세부 사항은 다음과 같습니다.

처리하는 데 15분이 걸리는 대용량 로그 파일이 있습니다. 이제 5분 후에 반전이 발생한다고 가정해 보겠습니다. Tail은 파일 설명을 열고 이를 사용하여 테일링 프로세스를 완료한 다음 새 프로세스로 이동합니다.

이제 마지막으로 기록된 파일과 줄의 기록을 유지합니다. 나는 프로세스의 라인 수를 늘려서 이 작업을 수행했습니다(다중 프로세스 프로그램이지만 또 무엇을 할 수 있습니까?).

문제는 뒤집은 후 새 파일이 라인 0에서 시작하지만 내 line_number가 500만 개로 늘어났다는 것입니다. 따라서 100개의 로그가 포함된 이 새 파일의 경우 줄 번호를 5,000,100으로 저장합니다.

줄 번호를 0으로 재설정하기 위해 파일이 반전되는 시기를 찾기 위해 워치독을 사용합니다. 하지만 초기 실행 중에 반전이 발생하면(예: 15분 실행 중 5분 표시에서) 여전히 300만 개 이상의 숫자를 얻습니다.

line_number는 마지막으로 중단한 부분부터 계속하는 데 사용되므로 프로그램이 예기치 않게 종료되는 경우 이는 데이터 손실을 의미할 수 있습니다.

참고: 저는 이 명령을 Python(CPython)에서 실행하고 있습니다.

답변1

stderrtail에서 으로 리디렉션 stdout하고 제공된 주석을 처리합니다 tail -F.

tail -F myLog.txt 2>&1

이제 Python 코드는 다음과 같은 메시지를 수신해야 합니다.

tail: cannot open 'myLog.txt' for reading: No such file or directory
tail: 'myLog.txt' has appeared;  following new file
tail: myLog.txt: file truncated

YMMV: 인용문은 신뢰할 수 없는 것 같고 파일을 뒤집을 때 경쟁 조건이 발생할 수 있습니다. 하지만 file truncated그 뒤에는 새로운 줄 1이 와야 합니다.

관련 정보