새로운 빈 파일로 교체하고 오래된 파일을 삭제(또는 보관)하지 않고 로그 파일의 파일 크기를 고정된 상태로 유지할 수 있는 방법이 있습니까? 예를 들어, 로그 파일 최대 크기를 1MB로 설정한 경우 파일 크기가 해당 제한을 초과하면 자동으로 고정되고 텍스트가 "꼬리"에 추가되고 텍스트의 가장 오래된 부분이 팝업됩니다. 파일 크기를 1MB로 유지하세요.
답변1
이를 위해 작은 bash 스크립트를 작성할 수 있습니다. tail -c
파일을 덮어쓰려면 특정 바이트 수까지 tail 파일을 사용하면 됩니다 .
에서 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
지금은 모르겠습니다.