항상 실행되는 프로세스가 있고 로그 파일은 최대 5GB까지 가능하며 때로는 시간 간격을 기준으로 이 로그의 일부를 가져와야 합니다(보통 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를 메모리에 유지하면 필요하지 않을 때 "로그 로그"에 줄을 인쇄하지 않거나 오랜 기간 동안 활동이 없으면 중지하도록 결정할 수 있습니다(또는 시간 간격을 동적으로 수정...).