엄청나게 느는 로그 파일을 볼 수 있을 것이다.
이런 로그 파일들을 컴퓨터가 적절히 압축하고 잘라내고 관리하도록
설정하는 프로그램이 logrotate이다. 요즘에는 기본적으로 시스템 설치시 logrotate를 설치하는 경우가 대부분다.
#!/bin/sh
/usr/sbin/logrotate
/etc/logrotate.conf
즉 /etc/logrotate.conf 파일을 설정
파일로 주어서 매일 logrotate를 실행시키는 것이다. 그럼 logrotate.conf 파일을 보자.
# 매주 로그 파일을
처리한다.
weekly
# 4주간의 로그 파일을 보관한다.
rotate 4
# 오류는 root 사용자에게
보고한다.
errors root
# 이전 로그 파일을 저장한 다음 새로운 로그 파일을 만든다.
create
#
이전 로그 파일은 압축하여 저장한다.
compress
# /etc/logrotate.d 디렉토리내의 파일들을
읽어들여서 처리한다.
include /etc/logrotate.d
배포판에 따라서
내용이 조금씩 다르겠지만 logrotate가 설치되어 있다면 기본 골격은 비슷할 것이다.
여기에 대한 설명은 코멘트로
생략하고 앞서 logrotate 매뉴얼에 나와 있는 예를 먼저 들어 보겠다.
# sample logrotate configuration file
errors kkwang@kkwang.com
compress
/var/log/messages {
rotate
5
weekly
postrotate
/sbin/killall -HUP
syslogd
endscript
}
“var/log/httpd/access.log”
/var/log/httpd/error.log {
rotate 5
mail kkwang@kkwang.com
errors kkwang@kkwang.com
size=100k
sharedscripts
postrotate
/sbin/killall
-HUP httpd
endscript
}
/var/log/news/* {
monthly
rotate
2
missingok
errors kkwang@kkwang.com
postrotate
kill -HUP `cat
/var/run/inn.pid`
endscript
nocompress
}
제
일 첫줄은 코멘트이고 다음 2줄은 logrotate 전체의 옵션이다. 즉, 로그 파일 처리중 발생하는 오류는kkwang@kkwang.com에게 메일로 알리고 로그 파일은
압축하는것을 기본으로 한다는 내용이다.
다음은 각각의 로그 파일에 대해 처리 옵션을 지정하고 있다.
먼저
/var/log/messages란 로그 파일은 1주일에 한번씩 새로운 로그 파일을 만들고(weekly)
이전 파일은 5주간 보관한 다음 제거한다.(rotate 5) 로그 파일이 새로 생성된 다음에는
/sbin/killall -HUP syslogd 명령이 실행된다. (postrotate … endscript)
다
음은 /var/log/httpd/access.log 와 /var/log/httpd/error.log 2개의 파일을 함께 지정하고
있다. 이들 파일은 크기가 100K 이상으로 커지면 새로운 로그 파일을 생성하고(size=100k)
5개의 로그 파일을 보관한 다음(rotate 5) 가장 오래된 로그 파일은 제거하지 않고 압축되지
않은 상태로 kkwang@kkwang.com에게 메일로 보내진다.(mail kkwang@kkwang.com) 로그 파일 처리중에
발생하는 오류는 kkwang@kkwang.com에게 보고하고(errors kkwang@kkwang.com) 2개의 로그 파일을
같이 처리할 때 postrotate 스크립트는 각 로그 파일을 처리할때 마다 실행되지 않고 한번만
실행된다(sharedscripts)는 내용이다. 만일 로그 파일에 공백문자가 포함된다면 처음과 같이
“로 둘러싸서 지정할 수 있다.
마지막은 /var/log/news 디렉토리 안의 모든 로그 파일들에 대한 지정이다.
각 로그 파일들은 1달에 1번씩 새로 만들어지고(monthly) 오류는 kkwang@kkwang.com에게 보고된다. 로그파일이
없더라도 오류를 발생시키지 않으며(missingok) 보관하는 로그파일은 압축하지 않는다.(nocompress) 여러 파일들을
처리하더라도 앞에서 파일을 와일드 문자(*)로 지정했기 때문에 하나의 파일처리로 인식되며 몇가지 파일에서 오류가 발생하더라도 오류
메일은 한통이 보내진다.
다음은 설정파일에서 사용할 수 있는 명령어들중 일부이다.
- compress
- 오래된 로그 파일들은 gzip으로 압축하여 보관한다. 압축을 원하지 않을 경우 nocompress를 사용하라.
- copytruncate
- 보통 로그 파일 처리시에는 원래 로그 파일의 이름을 바꾸고 새로운 로그 파일을 생성하지만 이 옵션을 사용하면 현재
로그 파일의 내용을 복사하고 로그 파일의 크기를 0으로 만든다. - create mode owner group
- postrotate 스크립트가 실행되기 전에 새로운 로그파일을 만들때 로그 파일의
mode, 사용자, 그룹을 지정한다. 기본으로는 원래 로그 파일과 같은 mode, 사용자, 그룹으로 새로운 로그 파일이
만들어진다. - daily, weekly, monthly
- 각각 매일, 매주, 매달 로그 파일을 처리한다.
- errors 메일주소
- 로그 파일 처리시 발생한 오류를 메일주소로 알린다.
- extension 확장자
- 보관한 로그파일의 확장자를 지정한다. 압축하는 경우에는 확장자 다음에 .gz이 붙게된다.
- ifemtpy
- 기본값으로 르고 파일의 내용이 없더라도 새로운 로그 파일을 생성한다.
- include 파일/디렉토리
- 파일의 경우 파일의 내용을 읽어들여서 처리하고 디렉토리의 경우 디렉토리 내의 모든 파일들을 읽어서 처리한다. 이
명령어는 전체설정에서만 사용할 수 있다. 디렉토리나 파이프와 같이 정규 파일이 아닌 것들과 뒤에서 설명할 tabooext의
확장자를 가지는 파일은 읽어들이지 않는다. - mail 주소
- 로그 파일의 보관 주기가 끝나면 주소로 로그 파일을 보낸다.
- mailfirst
- mail 주소 명령에서 보관 주기가 끝난 로그 파일이 아니라 방금 보관된 로그 파일을 메일로 보낸다.
- missingok
- 로그 파일이 존재하지 않더라도 오류를 발생시키지 않는다.[/dl]]
- [[dl]]nocopytruncate
- copytruncate와 유사하게 작동하지만 보관할 로그 내용을 복사한 다음 현재 로그파일의 크기를 줄이지
않는다. - olddir 디렉토리
- 오래되서 보관해야 할 로그 파일이 저장될 디렉토리를 지정한다. 디렉토리는 로그 파일과 같은 물리적 장치에 존재해야
한다.[/dl]] - [[dl]]prerotate/endscript
- 두 명령사이에 위치하는 명령들을 로그 파일 처리전에 실행시킨다.
- postrotate/endscript
- 로그 파일 처리후에 실행할 명령들을 지정한다.
- sharedscripts
- 기본적으로는 로그파일을 처리할때마다 prerotate, postrotate 스크립트가 실행된다. 만일 여러 로그
파일을 처리하더라도 prerotate, postrotate 스크립트가 한번만 실행되기를 원한다면 이 명령어를 사용할 수 있다.
단, 이 명령어를 사용하면 처리된 로그 파일이 없더라도 prerotate, postrotate 스크립트가 한번 실행된다. - rotate 수
- 로그 파일은 지정한 수만큼 저장된 다음 제거되거나 메일로 보내진다. 만일 0을 지정하면 보관하지 않고 바로
처리한다. - size 크기
- 로그 파일의 크기가 지정한 크기 이상이 되면 처리한다. 크기는 M,k 단위를 사용하여 지정할 수 있다.
- tabooext [+] 확장자들
- include 문에서 읽어들이지 않을 파일의 확장자를 지정한다. 기본값으로는 .rpmorig, .rpmsave,
v, .swp, .rpmnew, ~이 지정되어 있으며 +를 사용하는 경우 현재 리스트에 확장자들을 추가한다.