it-gundan.com

logrotate 없이도 로그 파일 크기를 고정으로 유지하십시오

로그 파일의 파일 크기를 새 빈 파일로 회전시키지 않고 이전 파일을 삭제하거나 삭제하지 않고 파일 크기를 고정시키는 방법이 있습니까? 예를 들어 로그 파일을 1MB로 설정하면 파일 크기가 해당 제한을 초과하면 자동으로 클램핑되면 텍스트가 '꼬리'에 추가되고 텍스트의 가장 오래된 부분이 파일 크기를 유지하기 위해 열립니다. 1MB ...에.

13
uray

이렇게하기 위해 작은 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.
4
jjclarkson

나는 원래 포스터가 8 년 후에 해결책을 발견했다고 확신합니다. 이 스레드를 읽을 수있는 다른 사람들을위한 또 다른 하나는 다음과 같습니다.

축소는 프로그램의 출력의 크기를 제한하고 다음 명령을 사용하여 지난 200MB의 출력을 보존합니다.

run_program | 축소 -s 200m myprogram.log.

https://github.com/comcast/infinite-file-curtailer .

0
Dave Wolaver
 * PRUNE - 
 * 파일/etc/default/prune에 설명 된 파일 목록의 꼭대기에서 클립. 주기적으로 실행되도록 설계되었습니다 
 * 크론에서, 아이디어는 영원히 자라는 파일을 자동으로 단축하는 것입니다. 이 파일에는 
 * 파일 (전체 경로 이름)의 목록이 포함되어 있으며 
 * 블록 수를 유지해야합니다. 어떤 정신을 유지하기 위해, 자두겠습니다. 
 * 다음 개행 후 파일을 클립하십시오. 파일 
 */etc/default/prune은 다음과 같아야합니다. 
 */kr/adm/aculog 10 
 */usr/adm/leo .log 5 
 */usr/adm/messers 200 
 */kr/adm/sup_log 5 
 * 
 * 프룬에 대한 Infoswx의 Crontab 항목 : 
 * 
 * 0 5 * * */etc/prune> /usr/adm/prune.log 2> & 1 
 * 
 * 컴파일 : CC -o -o prune.c 
 * 
 * 
 * 및 시스템 블록 크기에 맞게 다음 정의가 조정될 수 있습니다. 
 * 
 * 
 * ____.] * 레이 Davis Infoswx! 꿀벌 09/25/85 

https://groups.google.com/group/mods.google.com/group/mod.sources/browse_thread/thread/b2136b30e924e/f785b37e924e/f785b37c218bb576?hl=en&ie=utf-8&q=krune_log+file&pli=1

많은 (대부분? 모두?) 데몬은 HUP 신호를 보낸 경우 로그 파일을 다시 열 수 있습니다 (예 : PRUNE을 실행하는 동일한 CRON 작업으로)

0
RedGrittyBrick

유일한 솔루션은 사용자 자신의 USERSPACE 파일 시스템을 작성하거나 기존 사용자에게 기여할 수 있습니다. 부분 목록을 봅니다 . 사용자 공간의 파일 시스템

기부 할 기술이 없으면 프로젝트 홍보 또는 $$$ 또는 둘 다를 제공하여 추가 할 수 있습니다.

나는 그것을 할 시간이 있었으면 좋겠다. 나는 항상 이런 일을 항상 원했다.

0
Stephen Jazdzewski

0 바이트 크기의 파일과 같은 일종의 FIFO를 사용하여 비슷한 것을 할 수 있습니다.

그러나이 파일에서 아무 것도 읽지 않으면 syslog 프로세스가 차단되고 모든 로그 파일에 쓰는 것을 중지 할 수 있습니다. 나는이 행동이 최신 버전의 우분투/센터로 변경되었는지 확실하지 않습니다.

하나의 예 여기 .

다른 예를 들어, 이런 식으로 시도하십시오.

당신의 fifo 만들기 :

Sudo mkfifo /var/log/everything.fifo

(r) syslog.conf에 이것을 추가 한 다음 syslog를 다시 시작하십시오.

*.*     |/var/log/everything.fifo

그런 다음 FIFO 한 창에서 :

cat /var/log/everything.fifo

그리고 다른 창에서 syslog에 물건을 보내십시오.

logger Test1
logger Test2
logger Test3

cat의 출력에서 ​​"테스트 *"라인이 표시되어야합니다.

이 기능은 디버깅에 적합 할 수 있습니다. 특히 데이터를 더 오래 유지하지 않으려는 경우에는 디버깅 할 수 있습니다. 예를 들어, Firewall 스팸을 제외한 모든 것을보고 싶다면 다음과 같이 할 수 있습니다.

grep -vi "kernel: .* on wan" /var/log/everything.fifo
0
Stefan Lasiewski