티스토리 뷰
logrotate 는 특정 파일을 일정 시점, 크기 등 지정된 조건에 따라서 백업해주는 명령어이다. 주로 시간이 지남에 따라 한 없이 커질 수 있는 로그파일을 logrotate 를 통해 주기적으로 백업하는데 이용된다. 예를들어 system.log 라는 파일이 매일 1 GB 씩 내용이 누적된다고 하면 한달이면 벌써 30 GB 가 되버리고 그 파일 자체를 핸들링하는게 매우 어렵게 된다 ( 파일 안에서 특정 단어를 검색한다던지 ). 이럴 때 logrotate 를 통해 매일 지정된 시간에 system.log.1.gz, system.log.2.gz, system.log.3.gz... 으로 자동 백업하거나 파일 크기가 일정 사이즈 이상 되었을 때 분할 할 수 있다.
우선 logrotate 는 심플한 소개가 달려있다.
$ whatis logrotate
logrotate (8) - rotates, compresses, and mails system logs
그럼 바로 실전으로 들어가보자. 놀랍게도 기본적으로 데비안이나 레드햇 등에서 나오는 대부분의 *NIX 시스템에는 이미 logrotate 가 돌고 있다. 그런이유로 /var/log 밑에 여러 파일이 rotates 되고 있는게 확인된다. 이건 cron 시스템에 의해 동작하게 되는데 여기서는 다루지 않고 logrotate 의 설정 파일부터 들여다보자. 패키지 설치 프로그램 ( apt, yum 등 ) 으로 logrotate 가 설치 되었다면 logrotate 의 설정파일은 /etc/logrotate.conf 에 있을 텐데 내용중 include /etc/logrotate.d 가 쓰여있는 라인에 주목하자. /etc/logrotate.d 디렉터리 밑에 있는 모든 설정을 포함한다는 내용으로 이제 사용자가 특정 로그를 rotate 하려면 /etc/logrotate.d 디렉터리 밑에 규칙에 맞게 파일만 작성해주면 되겠다.
아래 샘플 파일( /etc/logrotate.d/foo )을 참고하도록 하자. 첫 라인에 명시된 파일을 rotates 하라고 지정하는 설정 파일이다.
/home/foo/node/logs/*log {
su foo foo
daily
rotate 10
missingok
notifempty
compress
postrotate
su - foo -c "pm2 restart all 2>/dev/null || true"
endscript
}
이 예제는 인터넷에 돌아다니는 흔한 내용에 두 가지 내용이 추가되어있다. 일반적으로 rotates 대상이 되는 파일은 보안그룹이 root 에서 제어할 수 있어야 하는데 일반 사용자 디렉터리는 그게 안된다. 보안그룹을 맞춰주던지 보안 등급을 낮춰야 하는 수고가 뒤따른다. 이 예제는 이 부분을 회피하기 위한 방법으로 첫번째 라인에 su foo foo 를 추가해줬다. 형식은 아래와 같다.
su <user> <group>
그리고 postrotate 와 endscript 사이에 사용자 스크립트를 추가할 수 있는데 foo 계정으로 지정된 스크립트를 실행시켜줬다. 일반적으로 pm2 는 실행하는 계정에 존속관계가 있기 때문에 rotates 를 실행하는 root 에는 pm2 에 내용이 없다. foo 계정으로 pm2 등의 스크립트를 실행시켜준다는게 핵심이다.
su - foo -c "pm2 restart all 2>/dev/null || true"
나머지 옵션은 다음과 같은 뜻을 갖는다.
daily |
rotate 되는 주기를 하루 단위로 한다. hourly, weekly, monthly, yearly 로 설정할 수 있다 |
rotate 10 |
rotate 된 파일을 보관할 개수를 10개로 지정한다 |
missingok |
파일이 없어도 오류를 발생시키지 않는다 |
notifempty |
파일이 비어있으면 rotate 하지 않는다 |
compress |
rotate 된 로그파일을 압축한다. default 로 지정되어 있다 |
조금 더 다양한 옵션은 아래를 참고하도록 하자.
https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html
'개발 > Linux' 카테고리의 다른 글
conda tab completion (자동완성) 만들기 (2) | 2019.06.11 |
---|---|
[CVE-2019-12735] Vim 취약점 발견 (2) | 2019.06.11 |
vim : 멀티라인 커맨드 (0) | 2018.08.09 |
crontab 사용시 권한 주의 (0) | 2018.03.04 |
리눅스 명령어 삼대장: find, grep, awk (6) | 2018.02.07 |
- Total
- Today
- Yesterday