매일 새로운 로그 파일을 생성하는 로그가 있습니다. 다음은 로깅을 켠 이후 생성된 모든 로그 목록입니다.
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
하도록 속일 수 있기를 바랍니다 . 그러면 구성은 다음과 같습니다.logrotate
logrotate
/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개는 압축된 상태로 유지하려고 한다고 가정해 보겠습니다 . 다음과 같이 할 수 있습니다:
- 에서 파일을 만듭니다
/etc/logrotate.d/myfiles
. - 다음 내용을 붙여넣으세요.
/var/log/remote/*.log
{
매일 10개의 공유 스크립트 누락 확인 순환 압축 } logrotate
디버그 모드에서 어떻게 작동하는지 테스트 할 수 있습니다 .logrotate -d /etc/logrotate.d/myfiles
- 정말로 실행하고 싶다면 지금 실행하세요.
logrotate -f /etc/logrotate.d/myfiles