줄이 기록되는 시간을 기준으로 파일 조각 자르기

줄이 기록되는 시간을 기준으로 파일 조각 자르기

나는 항상 로깅 파일이 최대 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를 메모리에 보관하면 필요하지 않을 때 "로그의 로그"에 줄을 인쇄하지 않도록 결정하거나 오랫동안 활동 없이 중지하거나 시간 간격을 동적으로 수정하도록 결정할 수 있습니다.

관련 정보