나는 항상 로깅 파일이 최대 5기가에 도달할 수 있는 프로세스를 실행하고 있습니다. 때로는 시간 간격을 기반으로 이 로그 조각을 가져와야 합니다(보통 dd를 사용함). 시간 간격에 따라 로그 조각을 가져오는 명령이 Linux에 있습니까?
추신: 이 로그 내 대부분의 줄에는 타임스탬프가 없습니다.
답변1
Wiese가 제안한 것처럼 수행할 수 있는 명령이 없다면 파일의 외부 색인을 생성해 보는 것은 어떨까요?
아이디어는 다음과 같습니다. 영원히 실행되는 스크립트를 수행하고(또는 아래 참고 사항을 거의 참조) 인덱스를 생성하는 데 시간 간격을 제공할 수 있습니다.
PIDofThisInstance=$$
# ... you code for the header, checks...
while true ; do
# This is the core of your cycle
sync # Maybe
CurrentSize=`ls -s $MyFile | awk '{print $1} ' `
CurrentTime=`date +"%Y%m%d%H%M%S"`
echo $CurrentTime $CurrentSize >> $Log_Of_My_Log_File
sleep $TimeToSleep
# if (exit-condition)
# then
# break #Exit from the infinite loop.
# fi
done
시작/종료 날짜/시간이 지정된 다른 스크립트를 수행한 후 시작/종료 크기로 응답합니다. 그 숫자에서 파일을 잘라낼 수 있습니다.
당신은 그것이 거대한 파일이라고 말했습니다. 그래서 나는 당신에게 함께 할 것을 제안하지 않습니다줄 번호어쩌면 head MyFile.log -n xxx | tail -n yyy
… 그것은 길 것이다. 크기로 작업하는 것이 좋습니다.
노트:
- 이것이 형식화된 출력이 있는 로그인 경우(알지 못하더라도) 개발자 회사/프로그래머의 일부 분석 도구가 존재할 가능성이 항상 있습니다. 몇년이 지나도 나올 가능성이 있습니다. IMHO는 해당 형식을 건드리지 말고 별도의 파일을 만드는 것이 좋습니다.
- 로그를 생성하는 프로그램의 PID를 알고 있는 경우 현재 PID(손으로 종료해야 하는 경우), 파일 이름(로깅 개체)과 같은 스크립트 매개변수를 작성하세요.
- 다음과 같은 조건이 있는 경우 주기는 영원히 지속되거나 종료될 수 있습니다. 로그를 생성하는 프로그램의 PID가 더 이상 존재하지 않고, 파일이 더 이상 존재하지 않으며, 실제 크기가 이전 파일보다 작습니다(이동 파일을 삭제하거나 로그를 다시 시작해야 인덱싱을 다시 시작할 수 있습니다).
- $LastSize를 메모리에 보관하면 필요하지 않을 때 "로그의 로그"에 줄을 인쇄하지 않도록 결정하거나 오랫동안 활동 없이 중지하거나 시간 간격을 동적으로 수정하도록 결정할 수 있습니다.