리눅스 logrotate
IT 위키
- 로그 파일을 주기적으로 압축하고 이름을 바꾸어 관리한다.
- 리눅스에서만 지원
- 경로 : /usr/sbin/logrotate
- 설정 파일 경로
- 베이스 설정 파일: /etc/logrotate.conf
- 로그별 설정 파일 디렉터리: /etc/logrotate.d/
1 사용법[편집 | 원본 편집]
로그별 설정 파일 디렉터리(/etc/logrotate.d/)에 설정 파일을 넣어 두기만 하면 알아서 동작한다. 내부적으로 cron 기반이므로 재기동 등의 특별한 절차가 필요하지 않다.
아래와 같은 명령어도 있으나, 기본적으론 설정 파일을 만들어 넣는 식으로 이용하는 것만으로 충분하다. 베이스 설정 파일에 기본적인 설정(ex. datetext)들이 있으므로 새로운 설정 파일엔 경로 등 일부 간단한 설정만 넣어줘도 된다.
설정 파일을 만드는 것이 핵심이므로 아래 문법보단 리눅스 logrotate.conf 문서를 참고하자.
2 동작 과정[편집 | 원본 편집]
- 기존 로그 파일 이름 변경
- 예:
access_log
→access_log.1
또는access_log-2025-06-02
- 예:
- 필요 시 압축 처리
- 예:
access_log.1
→access_log.1.gz
- 예:
- 새로운 빈 로그 파일 생성
create
옵션이 있으면access_log
파일을 다시 생성하고 권한 부여
- 서비스에 로그 파일 교체를 알림
- 보통
postrotate
에서systemctl reload
같은 명령으로 알림
- 보통
3 문법[편집 | 원본 편집]
logrotate [옵션] <설정파일>
3.1 옵션[편집 | 원본 편집]
- -d : 디버거 모드
- -f, --force : 새로운 목록이 추가되었거나 오래된 로그 파일을 수동으로 삭제할 경우 강제로 실행한다.
- -s, --state [statefile] : 지정한 정책 파일(statefile)으로 logrotate를 실행한다.
- --usage : 사용법을 출력한다.
3.2 설정파일 옵션[편집 | 원본 편집]
- yearly, monthly, weekly, daily 주기 옵션으로 로테이트를 실행할때 로그를 어떤 주기로 로테이트를 할지 선택
- rotate [숫자] 로그파일의 개수가 숫자이상이면 가장 오래된 로그파일을 삭제합니다.
- create [권한] [유저] [그룹] 로테이트 될때 생성되는 로그파일 권한 및 소유자 지정
- notifempty 로그 내용이 없으면 로테이트를 실행하지 않음 이와 반대로
- ifempty는 로그 내용이 없어도 로테이트를 진행
- compress 로테이트로 생성되는 로그파일 gzip으로 압축생성
- nocompress 로테이트로 생성되는 로그파일을 압축하지 않고 생성
- missingok 로그파일을 발견하지 못해도 에러처리 하지 않음
- dateext 로테이트 파일의 이름에 날짜가 들어가도록 생성
- size [숫자 K,M,G] 로그 파일이 크기가 설정보다 커지면 로테이트 실행
- maxage [숫자] 파일이 지정일 이상되면 삭제
- postrotate 실행후 스크립트 파일 실행
- endscript 스크립트를 실행하는 옵션 다음에 들어가야하는 옵션
4 예제[편집 | 원본 편집]
httpd 기본 설정 내용
/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true endscript }
아파치는 그 동작 구성 상 한번 구동이 되면 로그 파일 핸들을, 첫 구동 시 만든 것으로 계속 사용한다. 그래서 기존에 쓰고 있던 로그 파일을 없애고 새롭게 로그파일을 생성한 경우 reload를 해줘야 정상적으로 새로운 파일에 로그를 기록한다.[1]
5 같이 보기[편집 | 원본 편집]
6 참고 문헌[편집 | 원본 편집]
7 각주[편집 | 원본 편집]
- ↑ 위 동작 과정을 보면 알 수 있다. 만약 기존 로그 파일을 복제한 후, 내용을 비우는 방식이라면 reload가 필요 없겠지만 그렇게 하면 복제를 위한 I/O가 크기 때문에 mv로 파일명만 바꾸고 새로운 빈 파일을 만드는 식으로 동작하기 때문이다.