
stdout/stderr에 많은 로그를 발생시키는 서버를 디버깅하려고 합니다. 마지막 N 줄을 파일로 리디렉션합니다. tcpdump
's -C
& 플래그 -W
의 회전 버퍼 기능 과 유사합니다 . 서버가 실행되는 동안 로그를 보고 로그를 던질 수 있다면 좋을 것 같습니다( cp
다른 파일에서 볼 수 있습니다). 이 작업을 수행할 수 있는 유틸리티가 있나요? 이 도구에 대해 내가 아는 바에 따르면 logrotate
이 도구는 반복적으로 실행되어야 합니다. 나는 이것이 내 요구를 충족하지 않는다고 생각합니다. 내가 원하는 것은:
serverd -d | $TOOL -n 100 srv.log
...언제든지 srv.log
출력의 마지막 100줄이 포함됩니다 serverd
.
답변1
파일이나 입력 스트림의 마지막 N 줄만 가져오는 데 사용할 수 있습니다 tail
.
command | tail -n 100 > file
그러나 스핀 스트림의 마지막 100줄이 항상 로그 파일에 있기를 원하는 것 같습니다. 이것은 쉽지 않습니다. 정기적으로 행을 삭제하여 로그 파일을 자를 수도 있고, logrotate와 같은 시스템을 사용하여 오래된 데이터를 선별할 수도 있지만, 100줄의 FIFO 유형 로그 파일을 유지하는 쉬운 방법은 없습니다.
답변2
나는 원본 포스터가 지금쯤 해결책을 찾았다고 확신합니다. 이 주제를 읽을 수 있는 다른 사람들을 위한 또 다른 기사가 있습니다...
Curtail은 다음 명령을 사용하여 프로그램 출력의 크기를 제한하고 마지막 200MB의 출력을 유지합니다.
$ run_program | curtail -s 200M myprogram.log
인용하다
노트:저는 이 답변에 연결된 소프트웨어의 관리자입니다...
답변3
아파치에는 이라는 프로그램이 있습니다 rotatelogs
.
로그를 늘리려는 크기에 관계없이 크기의 절반을 선택하고 로그 파일 수를 2로 설정합니다.
<yourlogGenerator>|rotatelogs -n 2 logfile 5M
두 개의 5M 로그 파일이 생성되어 파일 간에 롤링됩니다.
이것은순환 로그에 대한 전체 설명.
추가한 -L linkname
다음 할 수 있습니다.tail -f linkname