logrotate
디렉토리 및 모든 서브 디렉토리에서 로그 파일을 고려할 수 있습니까? (즉, 하위 디렉토리를 명시 적으로 나열하지 않은 경우)
logrotate
디렉토리 및 모든 서브 디렉토리에서 로그 파일을 고려할 수 있습니까? (즉, 하위 디렉토리를 명시 적으로 나열하지 않은 경우)
답변:
하위 디렉토리는 얼마나 깊습니까?
/var/log/basedir/*.log /var/log/basedir/*/*.log {
daily
rotate 5
}
모든 회전합니다 .LOG 기본 디렉토리에있는 파일 /뿐만 아니라 모든 .LOG 기본 디렉토리의 직접적인 하위의 파일을. 1 단계 더 깊이 가야 /var/log/basedir/*/*/*.log
하는 경우 각 레벨을 다룰 때까지 다른 레벨을 추가하십시오 .
이는 충족되지 않는 제약 조건이 포함 된 별도의 logrotate 구성 파일을 사용하여 테스트 할 수 있으며 (최소 크기) 로그를 실행하면 상세 모드로 회전합니다.
logrotate -d testconfig.conf
-d 플래그는 회전하려고하는 각 로그 파일을 나열합니다.
-f
옵션은 logrotate에게 "force run"을 지시합니다. 명령 끝의 기본 단어는 기본값 대신 사용할 구성 파일입니다. 따라서 logrotate -f /some/config
구성 파일을 사용하여 실행해야하며 구성 파일에 아직 실행 시간이 없다고 표시 되어도 항상 실행됩니다. 훈련받지 않은 눈과 cron 작업을 한 전임자에게는 -f
구성 파일을 지정하는 것처럼 보였습니다 . 상당히 혼란 스럽습니다.
필자의 경우 하위 디렉토리의 깊이는 경고없이 변경 될 수 있으므로 모든 하위 디렉토리를 찾고 각 디렉토리에 대한 구성 항목을 작성하는 bash 스크립트를 설정했습니다.
와일드 카드 (예 : @ DanR 's answer)가 수행하지 않은 회전 후 하위 디렉토리의 구조를 유지하는 것도 중요합니다. 매일 로그 순환을 수행하는 경우이 스크립트를 매일 크론 작업에 넣을 수 있습니다.
basedir=/var/log/basedir/
#destdir=${basedir} # if you want rotated files in the same directories
destdir=/var/log/archivedir/ #if you want rotated files somewhere else
config_file=/wherever/you/keep/it
> ${config_file} #clear existing config_file contents
subfolders = $(find ${basedir} -type d)
for ii in ${subfolders}
do
jj=${ii:${#basedir}} #strip off basedir, jj is the relative path
#append new entry to config_file
echo "${basedir}${jj}/* {
olddir ${destdir}${jj}/
daily
rotate 5
}" >> ${config_file}
#add one line as spacing between entries
echo "\n" >> ${config_file}
#create destination folder, if it doesn't exist
[ -d ${destdir}${jj} ] || mkdir ${destdir}${jj}
done
@ DanR이 제안한 것처럼 logrotate -d
오래된 스레드이지만 다음을 수행 할 수 있습니다.
/var/log/basedir/**/*.log {
daily
rotate 5
}
이 두 별은 0 개 이상의 디렉토리와 일치합니다. 그러나 이미 회전 된 파일을 회전 할 수 있으므로 회전 할 로그 파일을 정의하는 방법에주의해야합니다. 여기서 logrotate 매뉴얼을 인용하겠습니다.
와일드 카드는주의해서 사용하십시오. *를 지정하면 logrotate는 이전에 회전 한 파일을 포함하여 모든 파일을 회전시킵니다. 이를 해결하는 방법은 olddir 지시문 또는보다 정확한 와일드 카드 (예 : * .log)를 사용하는 것입니다.
globstar
logrotate를 실행하기 전에 활성화해야 할 수도 있습니다 . 이것은 bash에 사용할 수있게합니다 shopt -s globstar
.
-d
실제로 logrotate를 드라이 런 모드로 전환하는 것처럼 보입니다 (즉, 실제로 아무것도 변경하지 않음).