리눅스 계열 서버에서 각종 로그를 로테이트시키는 기능은 logrotate 가 담당한다.
그런데, 이 logrotate 는 cron 데몬에 의해서 실행이 된다.
1. logrotate 가 실행되는 과정을 살펴 보자.
/etc/crontab 파일에 보면 아래와 같은 구문으로 매일 실행되는 것들의 폴더 위치가 있다.
02 4 * * * root run-parts /etc/cron.daily
위 폴더를 찾아가서 보면, logrotate 가 있다.
그러므로, 로그로테이트는 매일 4시02분에 하루에 한번씩 실행된다.
logrotate 파일을 열어 보면.. 아래와 같은 구문이 있다.
/usr/sbin/logrotate /etc/logrotate.conf
실제 실행파일의 위치와 설정파일의 위치를 알 수 있다.
이제 /etc/logrotate.conf 파일을 열어 보자..
주요 설정들이 있는데, 역시나 아래와 같은 설정파일을 따로 빼 놓은 인클루드 구문이 있다.
include /etc/logrotate.d
/etc/logrotate.d 폴더에 들어가 보면.. 이제 개별로 로테이트 시킬 로그에 대한 설정들이 들어 있다. ^^
오늘 살펴볼 아파치 서버의 로그를 로테이트 시키는 놈은 apache 나 httpd 와 같은 이름으로 되어 있다.
물론 다른 이름으로 되어 있을 수도 있으나, 누가 보더라도 직관적인 이름이 좋다.
파일을 열어 보면.. 아래는 필자의 설정파일 이다.
/var/log/httpd/*-access_log /var/log/httpd/*-error_log {
size 500k
rotate 19
missingok
compress
postrotate
/usr/bin/killall -HUP httpd
endscript
}
위 세팅에 대한 설명은..
virtual host 세팅으로 여러 도메인의 로그가 따로 저장되어 있으며,
로그파일 사이즈가 500k 가 넘으면 로테이트 시키고 지난 19 건 이전 것은 삭제한다. 압축저장한다.
또다른 설정을 만들어 보면..
/var/log/httpd/*-access_log /var/log/httpd/*-error_log {
missingok
rotate 5
weekly
notifempty
sharedscripts
postrotate
/usr/local/apache/bini/apachectl restart
endscript
}
위 세팅의 조건은 매주 실행되고 빈파일은 로테이트 하지않으며 5건 이전 것은 삭제한다.
2. 강제로 로테이트를 시켜 보자..
위 설정대로 일주일에 한번만 실행하라고 세팅하면, 오늘 실행후 일주일을 기다려야 한다.
하지만, 잘 되는지 확인해 보고자 할 때가 있다.
이때는, logrotate 가 실행된 날짜가 저장되어 있는 파일을 찾아 날짜를 조작하면 된다.
해당 파일은 /var/lib/logrotate.status 이다.
열어 보면 아래와 같은 구문이 보인다.
"/var/log/httpd/www.domain.com-access_log" 2014-10-1
여기서 맨 뒤에 있는 날짜가 마지막 실행된 날짜 이므로 이 날짜를 일주일 전으로 수정하면 된다.
그리고, logrotate 를 실행한다.
# /etc/cron.daily/logrotate
로그 파일을 살펴보면, 로그가 로테이트 되었음을 볼 수 있다.
* 참고 및 이미지 출처 : http://www.thegeekstuff.com/2010/07/logrotate-examples/#more-4826