![/var/log/messages는 rsyslog에서 삭제를 허용하지 않기 때문에 무기한 증가합니다.](https://linux55.com/image/166426/%2Fvar%2Flog%2Fmessages%EB%8A%94%20rsyslog%EC%97%90%EC%84%9C%20%EC%82%AD%EC%A0%9C%EB%A5%BC%20%ED%97%88%EC%9A%A9%ED%95%98%EC%A7%80%20%EC%95%8A%EA%B8%B0%20%EB%95%8C%EB%AC%B8%EC%97%90%20%EB%AC%B4%EA%B8%B0%ED%95%9C%20%EC%A6%9D%EA%B0%80%ED%95%A9%EB%8B%88%EB%8B%A4..png)
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 명령이 실행됩니다.