가변 로그 파일 크기 제한

가변 로그 파일 크기 제한

Bash 스크립트에서 "foo.txt"로 저장된 로그 파일의 크기를 제한하는 방법은 무엇입니까? 변수 "LOGFILE=50 mb"를 넣고 싶고 해당 크기 또는 LOGFILE의 크기에 관계없이 사용합니다.

이것은 데비안 7에서 완전히 최신 버전입니다.

답변1

로그 회전을 사용해야 합니다. 이런 짓을 해

고양이/etc/logrotate.conf

/경로/foo.txt {

    size 50M

    create 700 root root

    rotate 5

}

크기 50M - logrotate는 파일 크기가 이 크기보다 크거나 같은 경우에만 실행됩니다.

만들기 – 원본 파일을 회전하고 지정된 권한, 사용자 및 그룹을 사용하여 새 파일을 만듭니다.

회전 – 로그 파일 회전 수를 제한합니다. 따라서 이는 마지막 5개의 회전된 로그 파일만 유지합니다.

답변2

나는 tail전에 이것을 해본 적이 있습니다. 이는 빠르고 지저분한 솔루션에 가깝지만 logrotate작업을 완료합니다.

이것이 내가 스크립트에 추가한 내용입니다.

# in the preceding lines, the log file is updated, with new content at the 
# bottom.
# every update causes the file to exceed the size limit (set to 1MB)

# using tail, put the last 1MB of the file in a temporary file
/usr/bin/tail -c 1MB /your/path/here/logfile.log > /your/path/here//temp 2>&1

# overwrite the older and oversized log file with the new one
/bin/mv /your/path/here/temp /your/path/here/logfile.log

답변3

그런 것?

LF=foo.txt
typeset -i LFSB LFSM LOGFILE=50
let LFSB=$(stat -c "%s" $LF)
# This is bytes - turn into MB, base 2
let LFSM=${LFSB}/1048576
if [ $LFSM -gt $LOGFILE ]
  then
    echo Logfile $LF is greater than $LOGFILE MB
  else
    echo Logfile $LF is less or equal than $LOGFILE MB
fi

관련 정보