회원가입

로그인

아이디
비밀번호
ID/PW 찾기
아직 회원이 아니신가요? 회원가입 하기

[아파치로그강좌2] crontab 을 이용해 주기적으로 압축하기

Profile
:맥노턴
앞서 cronolog 를 이용해 로그 파일을 일 단위로 분할하는 방법을 알아보았다.

이렇게 분할된 로그파일을 주기적으로(하루에 한번) tar 의 -z 옵션을 이용해 압축하고자 한다면 어떻게 하면 좋을까?


앞서 cronolog 명령에 대한 설명을 듣고 설정한대로
/var/log/httpd/ 디렉토리에 20030323_access.log 와 20030323_error.log 의 형태로 로그파일이 매일매일 저장되고 있다고 보고...


아래의 내용으로 펄 스크립트 파일을 만든다.
(펄을 공부한지가 너무 오래되어서 다 까먹었다. ㅡ.ㅡ;)

#!/usr/bin/perl

sub getDateYMD {
local ($timestamp) = @_;

($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime($timestamp);
$year += 1900;
$mon = sprintf("%02d",$mon+1);
$mday = sprintf("%02d",$mday);
$dateYMD = $year.$mon.$mday;

return $dateYMD;

}

$logpath = "/var/log/httpd/";

$yesterday = time() - (60 * 60 * 24);
$dateYesterday = &getDateYMD($yesterday);

if (-e "$logpath${dateYesterday}_access.log" || -e "$logpath${dateYesterday}_err
or.log") {

        $command = "cd $logpath ; tar -cvz --remove-files -f ${dateYesterday}.tg
z ${dateYesterday}_*";

        exec($command);

} else {

        print "Source Not found\n";

}


다 만들고 나서 저장한다. 어디에 저장할지는 알아서 결정할 일이지만, 편의상 apache 가 설치되어 있는 bin 디렉토리에 하면 편리할 것 같아
/usr/local/etc/httpd/bin/logcompress.daily 로 저장했다.

저장한 뒤에는

# chmod 755 logcompress.daily

해서 실행가능한 권한을 주어야 한다.


이 스크립트는 생각보다 간단하다. 어제날짜_access.log 와 어제날짜_error.log 파일이 있는지 검사하여 파일이 둘 다 없으면 Source Not found 를 출력하고 끝낸다.

그렇지 않고, 어제 생성된 로그파일이 존재한다면.. tar 명령을 이용해 어제날짜.tgz 파일로 묶는 것이다.

그런데, 이걸 매일매일 손으로 실행시켜주어야 하느냐?
cron을 이용하면 자동으로 실행할 수 있다.

# vi /etc/crontab

하여 crontab 파일을 열어보자. 이곳에 주기적으로 실행해야할 내용들이 들이 있다. 내용을 보면,

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly


와 같이 되어있을 것이다.

맨 마지막 줄에 다음과 같이 삽입하자.

05 00 * * * root /usr/local/etc/httpd/bin/logcompress.daily



cron의 명령 순서는 띄어쓰기로 구분되며,

분 시 일 월 년 권한자 명령어

순으로 되어 있다. 추가할 명령을 해석해보면

05분 00시 매일 매월 매년 root권한 /usr/local/etc/httpd/bin/logcompress.daily명령실행


이 된다. 매일 00시 05분에 어제 날짜의 로그를 압축해서 보관하는 것이다.

crontab 에 매일 실행될 수 있도록 명령을 추가했으면,

# /etc/rc.d/ini.d/crond restart


해서 cron 데몬을 재시작하자.

이제 매일매일 자동으로 어제의 로그가 압축저장된다. 일반 로그파일을 tar 의 -z 명령으로 압축해서 보관하면 용량이 1/10 로 줄어든다. 접속량이 많을 경우 하루에도 100 MB의 로그가 생성된다. 압축하면 10MB로 줄어들어 공간을 확보할 수 있게 된다.

압축저장으로 공간을 아끼자.

:맥노턴.

Profile
:맥노턴
레벨 30
569479/686490
81%
McNorton & Education Lab.
Director
댓글
0
댓글 쓰기
권한이 없습니다.

로그인

아이디
비밀번호
ID/PW 찾기
아직 회원이 아니신가요? 회원가입 하기