
새로운 빈 파일로 회전시키고 기존 파일을 삭제(또는 보관)하지 않고 로그 파일의 파일 크기를 고정된 상태로 유지할 수 있는 방법이 있습니까? 예를 들어 로그 파일 최대 크기를 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
답변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
지금은 그것을 알아내지 않겠습니다.