logrotate는 이미 회전된 로그를 계속 회전하고 압축합니다.

logrotate는 이미 회전된 로그를 계속 회전하고 압축합니다.

매일 새로운 로그 파일을 생성하는 로그가 있습니다. 다음은 로깅을 켠 이후 생성된 모든 로그 목록입니다.

2019-01-04
2019-01-05
2019-01-06
2019-01-07
2019-01-08

이것은 로그 회전 구성입니다. 여러 번 반복을 시도했지만 로그가 압축되지 않고 롤오프될 때까지(90일 이내) "내버려 두었습니다".

/etc/logrotate.d/remote

/var/log/remote/*/*[!.]gz
/var/log/remote/*/*.[!g]z
/var/log/remote/*/*.g[!z]
/var/log/remote/*/*[!.][!g]z
/var/log/remote/*/*[!.]g[!z]
/var/log/remote/*/*.[!g][!z]
/var/log/remote/*/*[!.][!g][!z]
{
    rotate 90
    daily
    missingok
    compress
}

이것은 logrotate가 수행하는 작업을 보여주는 폴더 목록입니다.

drwxr-xr-x 2 root root 4.0K Jan  8 06:25 ./
drwxr-xr-x 6 root root 4.0K Jan  4 09:44 ../
-rw-r----- 1 root adm     0 Jan  8 06:25 2019-01-04
-rw-r----- 1 root adm    20 Jan  7 06:25 2019-01-04.1.gz
-rw-r----- 1 root adm    20 Jan  6 06:25 2019-01-04.2.gz
-rw-r----- 1 root adm  5.2K Jan  4 23:57 2019-01-04.3.gz
-rw-r----- 1 root adm     0 Jan  8 06:25 2019-01-05
-rw-r----- 1 root adm    20 Jan  7 06:25 2019-01-05.1.gz
-rw-r----- 1 root adm    20 Jan  6 06:25 2019-01-05.2.gz
-rw-r----- 1 root adm  7.4K Jan  5 23:58 2019-01-05.3.gz
-rw-r----- 1 root adm     0 Jan  8 06:25 2019-01-06
-rw-r----- 1 root adm    20 Jan  7 06:25 2019-01-06.1.gz
-rw-r----- 1 root adm  8.0K Jan  6 23:56 2019-01-06.2.gz
-rw-r----- 1 root adm     0 Jan  8 06:25 2019-01-07
-rw-r----- 1 root adm  7.8K Jan  7 23:55 2019-01-07.1.gz
-rw-r----- 1 root adm  101K Jan  8 13:16 2019-01-08

로그 보관 일수를 관리하고, 관리할 때 오래된 로그를 압축하고 싶습니다. 이것이 내가 원하는 결과입니다:

drwxr-xr-x 2 root root 4.0K Jan  8 06:25 ./
drwxr-xr-x 6 root root 4.0K Jan  4 09:44 ../
-rw-r----- 1 root adm    20 Jan  7 06:25 2019-01-04.1.gz
-rw-r----- 1 root adm    20 Jan  7 06:25 2019-01-05.1.gz
-rw-r----- 1 root adm    20 Jan  7 06:25 2019-01-06.1.gz
-rw-r----- 1 root adm  7.8K Jan  7 23:55 2019-01-07.1.gz
-rw-r----- 1 root adm  101K Jan  8 13:16 2019-01-08

답변1

기본적으로 지정된 디렉터리에서 숫자로 끝나는 로그 파일을 회전하려고 하므로 로그 일치는 다음과 같습니다.

/var/log/remote/*/*[0-9]

한 가지 문제는 logrotate옵션이 create기본값으로 설정될 수 있다는 것입니다. 즉, 로그 파일이 회전된 후(즉, 이름이 바뀌고 압축될 수도 있음) 새 로그 파일이 원래 이름으로 생성됩니다. nocreate이를 방지하려면 이 옵션을 사용하세요 .

그러나 가장 큰 문제는 로그 파일에 고정된 이름이 없다는 것입니다. logrotate이름이 매일 변경되므로 X 버전의 로그 파일을 유지하십시오. logrotate하루에 한 버전이 유지되므로 아무것도 삭제되지 않습니다.

이름이 "log-2019-01-09" 등이 되도록 이러한 로그 파일을 생성하는 것이 "log-"와 같은 접두사를 갖도록 확신할 수 있다면 제대로 작동할 수 있습니다. 이제 logrotate사용 여부를 알 수 dateext있으며 이것이 날짜 부분이 자체적으로 생성되었다고 가정 dateformat -%Y-%m-%d하도록 속일 수 있기를 바랍니다 . 그러면 구성은 다음과 같습니다.logrotatelogrotate

/var/log/remote/*/log {
    nocreate
    dateext
    dateformat -%Y-%m-%d
    delaycompress
}

그러나 내가 당신이라면 logrotate이러한 로그 파일이 예상과 다르게 동작하도록 강요하지는 않을 것입니다 logrotate. 예를 들어, 자체 로그 만료 스크립트를 롤아웃합니다.

#!/bin/sh
DAYS=90
TOPDIR=/var/log/remote
cd $TOPDIR
for i in *; do
    if ! [ -d $TOPDIR/$i ]; then
        continue
    fi
    cd $TOPDIR/$i
    find -maxdepth 1 -type f -name '????-??-??' -mtime +1 -exec gzip {} \;
    find -maxdepth 1 -type f -name '????-??-??.gz' -mtime +$DAYS -delete
done

답변2

나에게 당신이 묻는 질문은 정상입니다. file1.log, file2.log and file3.log폴더에 3개의 파일이 있고 /var/log/remote/매일 회전하고 마지막 10개는 압축된 상태로 유지하려고 한다고 가정해 보겠습니다 . 다음과 같이 할 수 있습니다:

  1. 에서 파일을 만듭니다 /etc/logrotate.d/myfiles.
  2. 다음 내용을 붙여넣으세요.

    /var/log/remote/*.log
    {
    매일 10개의 공유 스크립트 누락 확인 순환 압축 }




  3. logrotate디버그 모드에서 어떻게 작동하는지 테스트 할 수 있습니다 .

    logrotate -d /etc/logrotate.d/myfiles

  4. 정말로 실행하고 싶다면 지금 실행하세요.

    logrotate -f /etc/logrotate.d/myfiles

관련 정보