logrotate 없이 로그 파일 크기를 고정된 상태로 유지

logrotate 없이 로그 파일 크기를 고정된 상태로 유지

새로운 빈 파일로 회전시키고 기존 파일을 삭제(또는 보관)하지 않고 로그 파일의 파일 크기를 고정된 상태로 유지할 수 있는 방법이 있습니까? 예를 들어 로그 파일 최대 크기를 1MB로 설정한 경우 파일 크기가 해당 제한을 초과하면 자동으로 고정되고 텍스트가 '꼬리'에 추가되고 텍스트의 가장 오래된 부분이 팝업되어 파일 크기를 1MB로 유지합니다. .

답변1

이를 위해 작은 bash 스크립트를 작성할 수 있습니다. 파일을 사용하여 특정 바이트 수까지 파일을 마무리 tail -c하고 파일을 덮어쓰십시오.

에서 man tail:

-c, --bytes=N
              output the last N bytes; alternatively, use +N to  output  bytes
              starting with the Nth of each file

   If  the  first  character of N (the number of bytes or lines) is a `+',
   print beginning with the Nth item from the start of each  file,  other‐
   wise, print the last N items in the file.  N may have a multiplier suf‐
   fix:  b  512,  kB  1000,  K  1024,  MB  1000*1000,  M   1024*1024,   GB
   1000*1000*1000, G 1024*1024*1024, and so on for T, P, E, Z, Y.

답변2

나는 원본 포스터가 8년 후에 해결책을 찾았다고 확신합니다. 이 스레드를 읽을 수 있는 다른 사람들을 위한 또 다른 내용이 있습니다.

curtail은 다음 명령을 사용하여 프로그램 출력 크기를 제한하고 마지막 200MB 출력을 보존합니다.

실행_프로그램 | 축소 -s 200M myprogram.log

https://github.com/Comcast/Infinite-File-Curtailer

답변3

유일한 해결책은 자신만의 사용자 공간 파일 시스템을 작성하거나 기존 파일 시스템에 기여하는 것입니다. 부분 목록을 살펴보세요.사용자 공간의 파일 시스템

기여할 수 있는 기술이 없다면 프로젝트 홍보나 $$$ 또는 둘 다를 제공하여 추가하십시오.

시간이 있었다면 꼭 이런 일을 하고 싶었고, 항상 이런 일을 원했습니다.

답변4

여기 내 두 번째 대답이 있습니다. 이것은 꽤 해킹적인 것입니다.

반복적으로 실행하려면 watch(1)을 사용하십시오 tail --bytes=1024(로그 파일의 마지막 1024바이트, 해당 답변에 대해 @jjclarkson에게 감사드립니다).

watch --no-title tail --bytes=1024 /var/log/messages >/tmp/messages.watch

그런 다음 다음을 사용하여 파일을 봅니다.

less --raw-control-chars /tmp/messages.watch

watch와 while 루프 의 차이점은 watch/var/log/messages 에 변경 사항이 있는 경우에만 /tmp/messages.watch를 업데이트한다는 것입니다.

while true; do
    tail --bytes=1024 /var/log/messages > /tmp/messages.watch
    sleep 1
done

그리고 /var/log/messages가 업데이트된 경우에만 tail이 실행되도록 while 루프에 넣을 수 있을 것 같지만 test지금은 그것을 알아내지 않겠습니다.

관련 정보