apache httpd를 apachctl -k start 명령어로 실행하면, 다음과 같이 rotatelogs 플래그가 붙어서 실행되는 것을 확인할 수 있다.

rotatelogs는 apache httpd 패키지에 포함되어 있는 logrotate 바이너리인데, 문제는 이 녀석이 자동으로 삭제는 지원을 안 하는 듯 하다. (아니 이걸 왜 안함? ㅡㅡ)

 

그래서 간혹 아파치 웹서버 로그 파일들 때문에 스토리지가 Full 나버려서 장애가 발생하는 경우가 있으니, 아파치 웹서버를 사용하는 환경에서는 반드시 아래 스크립트를 작성하고 crontab을 등록하여 로그가 쌓여 스토리지가 Full 나버리는 상황을 예방해보자.


30일 이상 지난 로그 파일 삭제하는 스크립트 작성 - 'Delete_Log.sh'

#!/bin/sh

# 필자의 경우, httpd 로그 파일이 저장되는 경로가 /etc/apache/logs 라고 가정하였다.
# 필자의 경우, 로그 파일명이 '애플리케이션명_log.날짜' 와 같은 형태임을 유의하자.
# 최근 수정 날짜가 30일 이상인 파일들을 find 하고 해당 파일들에 rm 명령어를 수행한다.
/usr/bin/find /etc/apache/logs/ -name '*log.*' -mtime +30 | xargs -r rm
  • xargs -r : 표준 입력이 empty일 경우, 뒤에 오는 command를 수행하지 않도록 하는 옵션

 

작성한 스크립트 파일의 파일 권한을 실행할 수 있도록 수정 (예시는 root 계정만 수행할 수 있도록 설정)

chmod 744 Delete_Log.sh

작성한 스크립트 파일을 crontab에 등록

crontab에 등록함으로써, OS 상에서 지정한 스케줄에 맞춰 자동으로 해당 스크립트가 수행되도록 설정한다.

# crontab 등록 명령어
crontab -e

# 위 명령어 수행 결과로 나타나는 editor에서 다음 내용을 기입후 저장(:wq)
# '0 0 * * *'은 매일 00시 00분에 해당 명령을 수행한다는 의미
0 0 * * * {Delete_Log.sh 파일 위치}/Delete_Log.sh

# 위 editor를 빠져나온 후에 아래 명령어 수행하여 등록된 crontab 리스트 조회
crontab -l

 

  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 카카오스토리 공유하기