작업의뢰내용
현재 운영,관리하고 있는 리눅스 서버의 고객으로 부터,
1. 자신의 도메인 웹서버로그 파일을 자신의 계정디렉토리의 logs 디렉토리에 저장하기를 원하며,
해당 웹서버 로그파일은 1주일에 1번간격으로 로그로테이션 하기를 원하며, 6주뒤에 자동으로 삭제되기를 원한다.
2. 월요일은 제외한, 매일 새벽 4시20분에 고객 디렉토리내의 임시파일을 자동으로 삭제해주기를 원한다.
는 작업의뢰를 받았습니다.
상세내용
작업의뢰.1
아래의 내용을 확인한 뒤, 아파치 설정파일을 수정하고
실제로 고객의 의뢰에 합당하는 작업이 이루어지는지 확인하는 체크리스트를 작업순서서에 포함하시오.
(체크리스트는 별도로 작성할 필요없으며, 작업 순서서에 추가해서 작성하시오)
ㄱ. 해당 고객의 아파치 설정파일 내용
<VirtualHost xxx.xxx.xxx.xxx>
ServerName rcsystem.co.kr
ServerAlias www.rcsystem.co.kr
DocumentRoot /home/rcsystem/html
CustomLog logs/rc-access_log common
</VirtualHost>
ㄴ. 로그로테이트 설정파일
# ls -l /etc/logrotate.conf
-rw-r--r-- 1 root root 585 Jan 19 2005 /etc/logrotate.conf
ㄷ. 작업의뢰에 대한 참고사항
logrotate사용법에 대한 문서참고
작업의뢰.2
ㄱ. 고객 디렉토리 임시파일
고객이 테스트용으로 수시로 작성하는 임시파일이며, 위치와 파일명은 다음과 같습니다.
/home/rcsystem/html/temp_clock.txt
ㄴ. 해당 파일을 삭제하는 스크립트를 작성한 뒤, 해당 날짜,시간에 실행되도록 cron에 등록한다.
******************************************************************************************************************
작업의뢰.1
아래의 내용을 확인한 뒤, 아파치 설정파일을 수정하고
실제로 고객의 의뢰에 합당하는 작업이 이루어지는지 확인하는 체크리스트를 작업순서서에 포함하시오.
(체크리스트는 별도로 작성할 필요없으며, 작업 순서서에 추가해서 작성하시오)
ㄱ. 해당 고객의 아파치 설정파일 내용
<VirtualHost xxx.xxx.xxx.xxx>
ServerName rcsystem.co.kr
ServerAlias www.rcsystem.co.kr
DocumentRoot /home/rcsystem/html
CustomLog logs/rc-access_log common
</VirtualHost>
위에서 알 수 있듯이 고객의 호스트는 가상호스트이며 여기에서 로그 위치를 잡아준다면(etc/httpd.conf)해당 디랙토리로
로그를 저장 할 수 있다
->CustomLog logs/rc-access_log common 이 부분이 로그저장 위치이며 이는 디폴트로 아파치 홈 디렉토리나 /var에 로그가
저장되게 되어있다
우선 /hom/rcsystem 에서 mkdir logs 로 logs 디렉토리를 만들고
vi /etc/httpd.conf 에서
CustomLog /home/rcsystem/logs/rc-access_log common 으로 변경한다
뒤에 common은 로그 저장 포멧이며 여러가지 종류가 있지만 간략히 설명하면 common 은 로그가 간략히 나오고
combined는 좀더 자세히 뭐 이런식이다
자세한 내용은 LogFormat참고
ㄴ. 로그로테이트 설정파일
# ls -l /etc/logrotate.conf
-rw-r--r-- 1 root root 585 Jan 19 2005 /etc/logrotate.conf
이제 로그 디렉토리 설정을 했으니 로그로테이트를 해야한다.
cronlog, webalizer를 사용하는 방법도 있으나 괜히 부하를 줄 필요가 없으므로 /etc/logrotate.conf파일에서 작업해 주면
간단히 끝난다.
/etc/logrotate.conf 는 아파치를 설치 하면 다 있다.
*****************************************************************************************************************
먼저 로그로테이트 주요 옵션을 살펴보자
-f, --force
강제순환시킨다. 이 옵션은 새로운 항목을 추가한 후에 로그파일을 순환시키거나 옛날 로그파일이 이미 삭제되어 새로운 로
그파일이 생성되어 로그기록이 계속되고 있을 경우에 유용한 옵션이다.
-s, --state
기본 상황파일인 /var/lib/logrotate.status 파일대신에 지정한 state파일을 사용한다.
--usage
logrotate의 기본 사용법을 간단히 보여준다.
[root@linux logrotate.d]# logrotate --usage
Usage: logrotate [-m command] [-s statefile] [--usage] [OPTION...]
[root@linux logrotate.d]#
compress
순환되는 로그파일을 gzip으로 압축하게된다. nocompress와는 반대.
nocompress
순환되는 로그파일의 압축을 하지 않는다. 반대는 compress
create mode owner group
순환되어 생성되는 로그파일의 파일퍼미션(mode)과 소유자(owner), 그리고 그룹소유자(group)를 지정한 것이다.
(예, create root 600 wheel)
daily
로그파일을 매일주기로 순환시킨다.
weekly
로그파일을 매주주기로 순환시킨다.
monthly
로그파일을 한달주기로순환시킨다.
errors address
logrotate작업시에 에러가 발생한다면 지정된 메일주소로 메일을 보내게 된다.
extension ext
logrotate 실행후에 순환되어 생성되는 파일의 이름뒤에 확장자로 붙일 확장자명을 지정한다.
만약 compress라는 옵션으로 gzip으로 압축을 했다면 gz라가 확장자 뒤에 붙게된다.
예를 들면 compress라는 옵션과 함께 "extension ext"옵션이 주어졌다면 logrotate실행후에 생성되는 파일은
messages.0.ext.gz과 같은 모양새를 갖게되는 것이다
ifempty
로그파일이 비어있는 경우에도 rotate(순환)을 하게된다. 기본값이다.
notifempty
ifempty와는 반대로 로그파일이 비어있을 경우에는 순환을 하지 않는다.
mail address
logrotate작업후에 이전로그파일을 지정된 메일주소로 메일을 보낸다. (특정한 경우의 로그파일은 보내지 않을 수도 있다. )
postrotate/endscript
logrotate작업 이후에 지정된 작업(스크립트)을 실행한다.
prerotate/endscript
logrotate작업 이전에 지정된 작업(스크립트)을 실행한다.
rotate count
logrotate의 실행결과 순환되는 파일들의 총 갯수라고 이해하자.
즉, logrotate의 결과 삭제되거나 지정된 주소로 메일로 보내지기전의 총 파일갯수라고 이해하면 된다.
그리고 rotate 0로 설정하고 나면 이전파일은 순환과 함께 삭제되어 버린다.
size size
logrotate의 결과 순환된 결과 파일사이즈가 지정한 크기를 넘지 않도록 한다.
지정하는 방법은 100k, 100M등으로 용량단위를 붙여서 지정하면 된다.
******************************************************************************************************************
이제 설정해 보자
vi /etc/logrotate.conf
1. /home/rcsystem/logs/rc-access_log{ <-절대경로지정
2. weekly <-주단위
3. rotate 6 <-돌아가는 주기
4. sharedscripts
5. postrotate <-로그로테이트 후 실행할 명령
6. usr/bin/killall -HUP httpd <-아파치 리스타트
7. endscript
8. }
위 설정내용은 일주일에 한번씩 로그를 로테이트하며 6단위 즉 rc-access_log1,2,3,4,5,6 까지 순환 시키며 6번째가 지나면
가장 오래된 로그를 자동 삭제 하여 그 위에 새로운 로그를 쒸운다 아파치가 실행중에는 계속 이전 로그파일을 쓰기 때문에
순환할 수 없다 그래서 로그파일을 옮기거나 지운 후 서버를 재시작 하여 로그파일을 새로 열어야 한다.
이로서 한주에 한번씩 로그를 바꾸어 6주동안의 로그를 보관하며 6주가 지난 로그는 순환과 함께 자동삭제 된다 완료
(아파치를 재시작 하고 싶지 않다면 etc/httpd.conf에 CustomLog를
CustomLog "|/usr/local/apache/bin/rotatelogs /home/rcsystem/logs/rc-access_log %m%d 604800" common 식으로 변경
이러면 파이프를 이용 로그파일을 604800초(일주일)단위로 로그.월.일로 로그를 보관 할 수 도 있다 하지만 위에서 제시한
방법이 아니기에 패스)
작업의뢰.2
ㄱ. 고객 디렉토리 임시파일
고객이 테스트용으로 수시로 작성하는 임시파일이며, 위치와 파일명은 다음과 같습니다.
/home/rcsystem/html/temp_clock.txt
ㄴ. 해당 파일을 삭제하는 스크립트를 작성한 뒤, 해당 날짜,시간에 실행되도록 cron에 등록한다.
이건 뭐...스크립트고 뭐고 cron으로 걍 지우면 돼는데....
월요일을 제외한 4시20분...
crontab -e
20 4 * * 0,2,3,4,5,6 rm -f /home/rcsystem/html/temp_clock.txt
분 시 일 월 요일 명령
요래도 돼구
vi
#!/bin/sh
find /home/rcsystem/html/*.txt -exec rm -f {} \;
대충 저장 : wq del.sh
크론에 대충등록
crontab -e
20 4 * * 0,2,3,4,5,6 del.sh의경로
끝
어딘가에서 엄청나게 잘 못 되었을 수 도 있으며?있을것이며 이를 사용할 시 시스템이 뻑나도 책임없음~~냐하하하하