누군가가 방금 '응용 프로그램에 대한 로그를 얼마나 오래 보관해야합니까?'라고 물었고 공간이 부족한 것 외에는 버릴 이유가 없기 때문에 대답은 '디스크가 가득 찰 때까지'였습니다.
그러나 표준 로그 로테이션은 특정주기 + 회전 수를 지정하기를 원합니다. "매일 회전하고 여유 공간이 5 % 밖에 없을 때까지 원하는만큼 많은 기록을 유지하십시오"라고 말할 수있는 비슷한 것이 있습니까?
플랫폼은 Redhat Linux입니다.
누군가가 방금 '응용 프로그램에 대한 로그를 얼마나 오래 보관해야합니까?'라고 물었고 공간이 부족한 것 외에는 버릴 이유가 없기 때문에 대답은 '디스크가 가득 찰 때까지'였습니다.
그러나 표준 로그 로테이션은 특정주기 + 회전 수를 지정하기를 원합니다. "매일 회전하고 여유 공간이 5 % 밖에 없을 때까지 원하는만큼 많은 기록을 유지하십시오"라고 말할 수있는 비슷한 것이 있습니까?
플랫폼은 Redhat Linux입니다.
답변:
firstaction 또는 lastaction 지시문을 사용하여 디스크 여유 공간을 테스트하는 쉘 스크립트를 호출 한 다음 가장 오래된 파일에서 삭제를 실행할 수 있습니다.
firstaction/endscript
The lines between firstaction and endscript (both of which must appear on lines by themselves) are
executed (using /bin/sh) once before all log files that match the wildcarded pattern are rotated,
before prerotate script is run and only if at least one log will actually be rotated. These
directives may only appear inside a log file definition. Whole pattern is passed to the script as
first argument. If the script exits with error, no further processing is done. See also lastac-
tion.
최신 정보:
실행할 수있는 스크립트 유형에 대한 Stackoverflow 게시물은 다음과 같습니다.
logrotate 자체에는 그러한 옵션이 없습니다. 여유 공간이 기준 아래로 떨어질 때마다 제거 할 가장 오래된 로그를 찾는 cron 스크립트를 추가 할 수 있습니다. 다른 유효성 검사도 수행 할 수 있습니다. 그러나 디스크가 항상 가득 차면 시스템이 큰 임시 파일을 만들 수없고 응용 프로그램 오류가 발생할 수 있기 때문에 좋은 생각이 아닙니다.
@cjc가 제안했듯이 firstaction을 사용할 수 있습니다. 이 예제를보십시오 :
/mnt/user/logs/*.log /mnt/user/logs/*/*.log {
daily
missingok
rotate 7
compress
delaycompress
notifempty
su root www-data
create 760 root www-data
firstaction
for file in `find -type f -size +1024M`; do
percent=`df -h | grep /mnt/user | awk '{print $5}' | sed 's/%//'`
if [ $percent -gt 50 ]; then
echo "Removed $file" >> /mnt/user/logs/logrotate.log
rm $file
fi
done;
endscript
}
이 예에서는 파티션 사용 공간이 50 % 이상인 경우 / mnt / user 파티션 에서 1GB 보다 큰 파일을 제거했습니다 .