앞서 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로 줄어들어 공간을 확보할 수 있게 된다.
압축저장으로 공간을 아끼자.
:맥노턴.
이렇게 분할된 로그파일을 주기적으로(하루에 한번) 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로 줄어들어 공간을 확보할 수 있게 된다.
압축저장으로 공간을 아끼자.
:맥노턴.