계속 커지는 로그 파일을 일정 주기로 분리하고 보관 개수를 제한하는 방법입니다. 전역 설정은 /etc/logrotate.conf, 서비스별 정책은 보통 /etc/logrotate.d/ 아래에 둡니다. 같은 파일에 정책이 중복 등록되지 않았는지 먼저 확인합니다.
정책 파일 작성
다음은 lieper 계정의 작업 로그를 매주 순환하고 12개 보관하는 예시입니다. create는 새 원본 로그의 권한과 소유자를 지정합니다. rotate는 기간이 아니라 순환 파일 개수입니다.
/home/lieper/check.log {
weekly
rotate 12
missingok
notifempty
compress
delaycompress
dateext
create 0640 lieper lieper
su lieper lieper
}notifempty는 빈 로그를 건너뛰고 missingok는 파일이 없어도 오류로 처리하지 않습니다. compress는 분리한 로그를 압축하고 delaycompress는 바로 직전 로그의 압축을 다음 순환까지 미룹니다.
파일을 계속 열고 쓰는 서비스
순환 후에도 프로세스가 예전 파일 디스크립터에 쓰고 있다면 서비스가 로그 파일을 다시 열게 해야 합니다. 서비스에서 지원하는 reopen·reload 명령을 확인해 postrotate와 endscript 사이에 둡니다. 여러 파일에 같은 작업을 한 번만 수행하려면 sharedscripts를 사용합니다.
copytruncate는 원본을 복사한 뒤 크기를 0으로 만드는 대안이지만 그 사이 기록이 유실될 수 있습니다. 로그 재열기를 지원하는 서비스에는 해당 기능을 우선 검토합니다.
적용 전 구문과 동작 확인
-d는 실제 순환 없이 판단 과정을 출력합니다. 전체 설정을 함께 검사하면 다른 파일과의 중복도 확인할 수 있습니다. -f는 실제 강제 순환이므로 단순 구문 확인용으로 사용하지 않습니다.
logrotate -d /etc/logrotate.conf
systemctl list-timers --all | grep logrotate환경에 따라 cron이 실행할 수도 있으므로 실행 주체를 확인합니다. 실제 순환 후에는 새 로그의 소유자·권한, 서비스의 새 로그 기록 여부, 압축 파일과 보관 개수를 점검합니다. size 조건은 도구가 실행되는 시점에 평가되므로 파일이 지정 크기를 넘는 즉시 동작하는 상시 감시 기능은 아닙니다.