/var/log/messages는 rsyslog에서 삭제를 허용하지 않기 때문에 무기한 증가합니다.

/var/log/messages는 rsyslog에서 삭제를 허용하지 않기 때문에 무기한 증가합니다.

5GB 파티션에 2GB 파일만 할당하는 것처럼 보이지만 /var 공간 부족 문제가 있습니다. 문제는 /var/log/messages가 삭제되었지만 rsyslog에 의해 여전히 열려 있고 2.88GB라는 것입니다.

이제 rsyslog를 다시 시작하여 문제를 해결할 수 있으므로 2.8GB 파일을 적절하게 삭제할 수 있습니다. 그런데 어떻게 해서 이런 상태가 되었는지 궁금합니다. 로그가 무한정 커지는 것을 방지하기 위해 rsyslog가 자동으로 파일을 회전하면 안 되나요? 이런 일이 다시 발생하지 않도록 제가 할 수 있는 일이 있나요?

답변1

많은 배포판에서 이것이 작동하는 방식은 cron 또는 systemd 타이머에서 매일 호출되는 logrotate를 통해서입니다. Logrotate는 예 를 /etc/logrotate.d들어 ./etc/logrotate.d/rsyslog/var/log/messages

/var/log/messages
{
        rotate 4
        weekly
        missingok
        notifempty
        compress
        delaycompress
        sharedscripts
        postrotate
                /usr/lib/rsyslog/rsyslog-rotate
        endscript
}

파일이 교체된 후 rsyslog를 실행하여 rsyslogd에 이전 로그 파일을 닫도록 지시합니다(rsyslog를 다시 시작하여 수행되는 작업 /usr/lib/rsyslog/rsyslog-rotate) SIGHUP. 데몬은 다시 시작하지 않고 파일을 닫습니다 SIGHUP.rsyslogd(8)의 "신호" 부분.

답변2

사용logrotate

매뉴얼 페이지의 참조

logrotate는 명령줄에 지정된 일련의 구성 파일에서 처리해야 하는 로그 파일에 대한 모든 내용을 읽습니다. 각 구성 파일은 전역 옵션을 설정하고(로컬 정의는 전역 옵션을 재정의하고 이후 정의는 이전 정의를 재정의함) 회전할 로그 파일을 지정할 수 있습니다. 간단한 구성 파일은 다음과 같습니다.

# sample logrotate configuration file
compress

/var/log/messages {
    rotate 5
    weekly
    postrotate
        /usr/bin/killall -HUP syslogd
    endscript
}

구성 파일의 다음 섹션에서는 로그 파일 /var/log/messages가 처리되는 방법을 정의합니다. 이 로그는 삭제되기 전에 일주일에 5번 순환됩니다. 로그 파일이 교체된 후(그러나 이전 버전 로그가 압축되기 전) /sbin/killall -HUP syslogd 명령이 실행됩니다.

관련 정보