Logrotate : 비 로그 파일을 회전 시킵니까?


17

다양한 파일과 디렉토리를 압축하고 .tgz 아카이브를 만드는 백업 스크립트가 있습니다. 예를 들어 파일 이름

...
backup_2010-10-28.tar.gz
backup_2010-10-29.tar.gz
backup_2010-10-30.tar.gz
backup_2010-10-31.tar.gz
backup_2010-11-01.tar.gz

이 파일들을 관리하고 싶기 때문에 마지막 5 개의 백업 만 보관하고 오래된 파일은 삭제합니다.

logrotate를 사용하여이 작업을 수행 할 수 있습니까? 로그 파일이 아니며 이미 압축되어 있습니다. 그것들은 / root에 있고 / var / log에는 없습니다-여전히 사용할 수 있습니까?

감사

답변:


3

Logrotate는 파일을 회전하므로 대답은 예입니다. 충분한 권한이 없으면 / backup 또는 다른 곳에 배치하십시오. 회전 된 로그의 그룹 및 사용자를 확인하십시오 :-).

logrotate에는 압축 옵션이 있습니다. "압축"이 구성되어 있지 않으면 시도하지 않습니다. 귀하의 경우에도 "5 회전"옵션.

/etc/logrotate.d (또는 시스템에 저장된 위치)를 살펴보십시오.


26

공정을 변경하지 않으면 독자적으로 logrotate는 원하는 것을 수행하지 않습니다. 여기서 중요한 문제는 logrotate가 와일드 카드를 사용할 수 있지만 그렇게하면 파일을 하나로 취급하지 않고 모든 파일을 개별적으로 회전하려고 시도한다는 것입니다.

그러나 날짜 스탬프없이 가장 최근 백업이 생성되는 한 설명 된 방식으로 작동하게 할 수 있습니다. /root/backup.tar.gz예를 들어 백업 프로세스가 생성 되면 다음과 같은 로그 회전 구성을 사용할 수 있습니다.

/root/backup.tar.gz {
    rotate 5
    nocompress
    dateext
    dateformat _%Y-%m-%d
    extension .tar.gz
    missingok
}

옵션에 대한 간단한 설명은 다음과 같습니다.

  • rotate 5 -삭제하기 전에 5 번 회전 유지
  • nocompress -회전 후 파일을 압축하지 마십시오
  • dateext -숫자를 증가시키는 대신 날짜를 회전 확장으로 사용하십시오.
  • dateformat _%Y-%m-%d -사용하려는 날짜 확장자 형식을 설정하십시오.
  • extension .tar.gz- .tar.gz회전 연장선 을 따라 오다
  • missingok -회전하려는 파일이 없으면 걱정하지 말고 계속 진행하십시오 (기본값은 오류를 발생시키는 것입니다)

도움이 되었기를 바랍니다!


1
잘 했어. 나는 이것을 읽음으로써 몇 가지를 배웠다. 그러나 RedHat EL과 같은 일부 배포판은 "Enterprise Ready"가 아닌 옵션을 제거하는 경향이 있으므로 YMMV를 추가하고 싶습니다.
zerolagtime

이 솔루션에 따르면 stackoverflow.com/questions/14858752/… logrotate가 작업을 수행 할 수 있습니다.
Pieter

22

logrotate를 사용하지 않아도됩니다. 다음과 같은 명령을 사용하십시오.

ls -1 /root/backup_* | sort -r | tail -n +6 | xargs rm > /dev/null 2>&1

이 명령은 가장 최근 5 개의 파일을 남겨두고 나머지 (있는 경우)를 제거합니다. 크론 작업에서 사용할 수 있습니다.


그러나 이것은 회전하지 않습니다 ....
simpleuser

질문에 대답하지 않습니다.
kubanczyk

4
가장 최근의 백업 5 개를 유지하는 것이 문제였습니다. 더 간단합니다 : ls -t1 / root / backup_ * | 꼬리 -n +6 | xargs rm -f
yoyoma2

이것은 질문 에 대답 했다. 안타깝게도 원래 질문은 Google-fu에서 찾을 수있는 가장 가까운 질문이었습니다.
Sukima

0

방금 같은 상황이었습니다. Logrotate는 꽤 멋지지만 데이터와 파일 이름이 일치하지 않기 때문에 100 %에서 작동하지 않았습니다.

따라서 혼란을 피하기 위해 마지막 백업 5 개를 유지하기 위해 현재 백업을 만든 후 다음 행을 통합하기로 결정했습니다.

내 로그는 다음과 같습니다.

  • tbl-bcx-20180308_010501.tar.bz2
  • tbl-bcx-20180307_010501.tar.bz2
  • tbl-bcx-20180306_010501.tar.bz2

백업 스크립트에 새 줄 추가 (위의 설명을 기반으로 함)

  • / BCX / dumpsql / -type f 찾기 | 정렬 -r | 꼬리 -n +6 | xargs rm

문안 인사,


-1

수동으로 회전 할 수 있습니다.

rotating_logger()
{

_LOG_FILE_=${1}
_MESSAGE_TO_ECHO_=${2}

_LOG_FILE_BYTES_SIZE_=`wc -c ${_LOG_FILE_} | awk '{print $1}'`

#echo "_LOG_FILE_BYTES_SIZE_ : ${_LOG_FILE_BYTES_SIZE_}"

# in MB
if [ ${_LOG_FILE_BYTES_SIZE_} -gt ${_FILE_SIZE_IN_BYTES_} ] ; then
        #cat /dev/null > ${_LOG_FILE_}
         for (( i=${_LOG_ROTATE_MAX_INDEX_}; i>=1; i-- ))
        do
                 if [ $i -eq ${_LOG_ROTATE_MAX_INDEX_} -a -f ${_LOG_FILE_}.$i ] ; then
                        rm -rf ${_LOG_FILE_}.$i
                 fi

                if [ $i -gt 10 ] ; then
                        rm -rf ${_LOG_FILE_}.10
                elif [ $i -eq 9 -a -f ${_LOG_FILE_}.9 ] ; then
                       mv ${_LOG_FILE_}.9 ${_LOG_FILE_}.10
                elif [ $i -eq 8 -a -f ${_LOG_FILE_}.8 ] ; then
                       mv ${_LOG_FILE_}.8 ${_LOG_FILE_}.9
                elif [ $i -eq 7 -a -f ${_LOG_FILE_}.7 ] ; then
                       mv ${_LOG_FILE_}.7 ${_LOG_FILE_}.8
                elif [ $i -eq 6 -a -f ${_LOG_FILE_}.6 ] ; then
                       mv ${_LOG_FILE_}.6 ${_LOG_FILE_}.7
                elif [ $i -eq 5 -a -f ${_LOG_FILE_}.5 ] ; then
                       mv ${_LOG_FILE_}.5 ${_LOG_FILE_}.6
                elif [ $i -eq 4 -a -f ${_LOG_FILE_}.4  ] ; then
                       mv ${_LOG_FILE_}.4 ${_LOG_FILE_}.5
                elif [ $i -eq 3 -a -f ${_LOG_FILE_}.3  ] ; then
                       mv ${_LOG_FILE_}.3 ${_LOG_FILE_}.4
                elif [ $i -eq 2 -a -f ${_LOG_FILE_}.2  ] ; then
                       mv ${_LOG_FILE_}.2 ${_LOG_FILE_}.3
                elif [ $i -eq 1 -a -f ${_LOG_FILE_}.1 ] ; then
                       mv ${_LOG_FILE_}.1 ${_LOG_FILE_}.2
                fi
        done
        mv ${_LOG_FILE_} ${_LOG_FILE_}.1
        touch ${_LOG_FILE_}
fi

echo `date +%Y-%m-%d:%H:%M:%S` : "${_MESSAGE_TO_ECHO_}" >> ${_LOG_FILE_}
#echo "" >> ${_LOG_FILE_}
}

이제 로그에 데이터를 넣으려면

rotating_logger <file_path> "Welcome world!"

1
게시물을 유용하게 사용하려는 경우 게시물 형식을 지정하는 데 약간의 노력을 기울일 수 있습니다.
Tim
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.