logrotate 윤 문 nginx 로그

Linux 로그 파일 을 정기 적 으로 정리 하지 않 으 면 디스크 전 체 를 채 웁 니 다.위험 하기 때문에 로그 관 리 는 시스템 관리자 의 일상적인 업무 중 하나 입 니 다."logrotate" 를 사용 하여 Liux 로그 파일 을 관리 할 수 있 습 니 다. 로그 의 자동 스크롤, 로그 압축 파일 등 기능 을 실현 할 수 있 습 니 다.다음은 nginx 로그 파일 로 logrotate 의 용법 을 설명 합 니 다.
/ etc / logrotate. d / 디 렉 터 리 에 프로필 'nginx' 를 만 듭 니 다. 내용 은 다음 과 같 습 니 다.
#vim /etc/logrotate.d/nginx/usr/local/nginx/logs/*.log {
daily
rotate 5
missingok
dateext
compress
notifempty
sharedscripts
postrotate
    [ -e /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` ]
endscript
}

설명: / usr / local / nginx / logs / *. log: 로그 경 로 를 문의 해 야 합 니 다 daily: 매일 rotate 5: 최대 5 번 스크롤 하 는 로 그 를 유지 합 니 다 missingok: 로 그 를 잃 어 버 리 면 다음 로그 dateext 를 잘못 보고 하지 않 고 계속 스크롤 합 니 다. 사용 날 짜 를 이름 형식 으로 copress: gzip 압축 을 통 해 저장 한 로그 notifempty: 로그 가 비어 있 을 때 스크롤 하지 않 습 니 다 / var / run / nginx. pid: nginx pid 위치, nginx. confpost rotate / endscript: 덤 프 를 차단 한 후 실행 해 야 할 명령 을 보십시오.
즉시 차단 실행 가능 아래
/usr/sbin/logrotate -f /etc/logrotate.d/nginx

주: logratate 가 cron. daily (/ etc / cron. daily / logrotate) 에 추가 되 었 기 때문에 계획 작업 에 추가 할 필요 가 없습니다.
ogrotate 의 데모
Nginx 로그 압축 파일 을 하루 에 한 번 씩 저장 합 니 다. 설정 파일 은 '/ etc / logrotate. d / nginx' 입 니 다.
/usr/local/nginx/logs/*.log {
    daily
    dateext
    compress
    rotate 7
    sharedscripts
    postrotate
        kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

CRON 을 기다 리 지 못 하면 다음 명령 을 통 해 수 동 으로 실행 할 수 있 습 니 다.
shell> logrotate -f /etc/logrotate.d/nginx

물론 정식 실행 전에 Debug 옵션 을 통 해 검증 하 는 것 이 좋 습 니 다. 이것 은 디 버 깅 에 도 중요 합 니 다.
shell> logrotate -d -f /etc/logrotate.d/nginx

BTW: 비슷 한 것 은 Verbose 옵션 도 있 습 니 다. 여 기 는 더 이상 말 하지 않 겠 습 니 다.
Logrotate 의 질문
질문: shared script 의 역할 은 무엇 입 니까?
제 가 앞에서 Nginx 의 예 에서 로그 파일 을 설명 할 때 별표 어댑터 를 사 용 했 습 니 다. 즉, 여 기 는 여러 개의 로그 파일 과 관련 될 수 있 습 니 다. 예 를 들 어 access. log 와 error. log.이 쯤 되면 shared script 의 역할 은 모든 로그 파일 이 돌아 가면 서 스 크 립 트 를 통일 적 으로 실행 하 는 것 임 을 알 수 있 을 것 입 니 다.이 명령 을 설정 하지 않 으 면 로그 파일 마다 순환 이 끝 난 후에 스 크 립 트 를 실행 합 니 다.
질문: rotate 와 maxage 의 차 이 는 무엇 입 니까?
로그 파일 을 얼마나 저장 하 는 지 제어 하 는 데 사 용 됩 니 다. rotate 는 개수 단위 이 고 maxage 는 일수 단위 입 니 다.만약 우리 가 날짜 에 따라 일 지 를 윤전 한다 면, 양자 의 차 이 는 크 지 않 을 것 이다.
질문: 왜 로 그 를 만 드 는 시간 은 새벽 4, 5 시 입 니까?
앞에서 말 했 듯 이 Logrotate 는 CRON 을 기반 으로 실행 되 기 때문에 이 시간 은 CRON 에서 제어 합 니 다. 구체 적 으로 CRON 의 프로필 '/ etc / crontab' 를 조회 할 수 있 고 23: 59 등 시간 으로 수 동 으로 변경 할 수 있 습 니 다.
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/

# run-parts
01 * * * * root run-parts /etc/cron.hourly
59 23 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

새 CentOS 를 사용한다 면 설정 파일 은: / etc / anacrontab 입 니 다.
질문: 프로그램 에 로그 파일 을 다시 여 는 것 을 어떻게 알려 줍 니까?
Nginx 의 경우 post rotate 명령 을 통 해 USR 1 신 호 를 보 내 Nginx 에 로그 파일 을 다시 열 라 고 알 립 니 다.그러나 다른 프로그램 들 은 반드시 이러한 약속 을 따 르 지 않 습 니 다. 예 를 들 어 MySQL 은 flush - logs 를 통 해 로그 파일 을 다시 엽 니 다.더욱이 일부 프로그램 은 유사 한 방법 을 전혀 제공 하지 않 았 다. 이때 로그 파일 을 다시 열 려 면 서 비 스 를 다시 시작 해 야 하지만 가용성 을 높이 기 위해 서 는 받 아들 일 수 없다.다행히 Logrotate 는 copytruncate 라 는 명령 을 제 공 했 습 니 다. 이 방법 은 먼저 복사 한 다음 에 비 우 는 방식 을 사용 합 니 다. 전체 과정 에서 로그 파일 의 작업 핸들 이 바 뀌 지 않 았 기 때문에 프로그램 에 로그 파일 을 다시 열 라 고 알 릴 필요 가 없습니다. 그러나 주의해 야 할 것 은 복사 와 비우 기 사이 에 시간 차이 가 있 기 때문에 일부 로그 데 이 터 를 잃 어 버 릴 수 있 습 니 다.
BTW: MySQL 자체 가 슈퍼 port - files 디 렉 터 리 에 mysql - log - rotate 라 는 스 크 립 트 를 포함 하고 있 지만, 비교적 간단 하고 상세 한 로그 회전 은 'Rotating MySQL Slow Logs Safely' 를 참조 하 십시오.

좋은 웹페이지 즐겨찾기