nginx 로그 절단 방법 2 가지

nginx 가 너무 오래 담가 두 면 로그 가 점점 커지 기 때문에 이 를 자 를 필요 가 있 고 날짜 에 따라 방 문 량 을 집계 할 수 있 습 니 다.
어렵 지 않 습 니 다. 몇 줄 의 스 크 립 트 만 있 으 면 됩 니 다.
#!/bin/bash
# Description: rotate nginx access logs

NGX_PID=`cat /usr/local/nginx/logs/nginx.pid`

LOGS_DIR="/home/wwwlogs"

WWW_LOG_NAME="www.demo.com.log"
B2B_LOG_NAME="b2b.demo.com.log"
MOBILE_LOG_NAME="mobile.demo.com.log"
PLIST_LOG_NAME="plist.demo.com.log"

cd $LOGS_DIR
/usr/bin/mv  $WWW_LOG_NAME $(date +%F -d 'yesterday')_$WWW_LOG_NAME
/usr/bin/mv  $B2B_LOG_NAME $(date +%F -d 'yesterday')_$B2B_LOG_NAME
/usr/bin/mv  $MOBILE_LOG_NAME $(date +%F -d 'yesterday')_$MOBILE_LOG_NAME
/usr/bin/mv  $PLIST_LOG_NAME $(date +%F -d 'yesterday')_$PLIST_LOG_NAME

/bin/kill -USR1 $NGX_PID

cron 계획 퀘 스 트 에 추가
echo "0 0 * * * /home/scripts/rotate-nginx-logs.sh > /dev/null 2>&1" >> /var/spool/cron/root

=========================================================
2016-07-14
오늘 은 동료 들 이 나 에 게 더 간결 한 방법 을 주 었 다. logrotate 라 는 소프트웨어 만 설치 하면 된다.
참고 블 로그: http://www.pythondev.org/post/8.html
만약 우리 가 설치 한 nginx 로그 경로 가 / home / wwlogs / 에 있다 면, nginx 프로 세 스 PID 경 로 는 / usr / local / nginx / logs / nginx. pid 에 있 습 니 다.
yum install logrotate

설치 가 완료 되면 자동 으로 / etc / cron. daily / 아래 에 logrotate 스 크 립 트 파일 을 생 성 합 니 다.
cd /etc/logrotate.d/
vim nginx 내용 은 다음 과 같 습 니 다.
/home/wwwlogs/*log {
    su root www
    create 600 www www
    daily
    dateext
    rotate 10
    missingok
    notifempty
    compress
    sharedscripts
    olddir /home/wwwlogs/oldlogs  #           ,      
    postrotate
        kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
    endscript
}

종료 저장 하면 매일 자동 으로 로 그 를 자 를 수 있 습 니 다.
logrotate 상세 설명:
logrotate 는 직접 실행 할 수 있 습 니 다. 다음 설정 파일 을 따라 가면 됩 니 다. 예 를 들 어 / usr / sbin / logrotate - f / etc / logrotate. d / nginx
인자:
- v 디 스 플레이 명령 실행 과정
- d Debug 모드 (아 날로 그 실행) 는 명령 실행 과정 을 상세 하 게 표시 하여 프로그램 이 실 행 된 상황 을 잘못 배열 하거나 이해 할 수 있 습 니 다.
- f 강제 집행
-s  지정 한 상태 파일 사용 하기
logrotate 의 기본 설정 파일 은 / etc / logrotate. conf 입 니 다.주요 매개 변수:
daily 지정 덤 프 주 기 는 매일 입 니 다. 
weekly 는 덤 프 주 기 를 매주 로 지정 합 니 다. 
monthly 지정 덤 프 주 기 는 매월 입 니 다. 
dateext 파일 끝 에 현재 날 짜 를 추가 합 니 다. 
compress gzip 압축 을 통 해 저장 한 로그 
nocopress 가 압축 할 필요 가 없 을 때 이 매개 변 수 를 사용 하 십시오. 
copytruncate 는 먼저 로그 내용 을 오래된 로그 파일 로 복사 한 후에 로그 파일 내용 을 지 웁 니 다. 로그 기록 의 연속 성 을 확보 할 수 있 습 니 다.
nocopytruncate 백업 로그 파일 을 끊 지 않 습 니 다. 
create mode owner group 덤 프 파일, 지정 한 파일 모드 로 새 로그 파일 만 들 기 
nocreate 에서 새 로그 파일 을 만 들 지 않 습 니 다. 
delaycopress 와 copress 를 함께 사용 할 때 덤 프 된 로그 파일 은 다음 덤 프 때 압축 됩 니 다. 
nodelaycopress 는 delaycopress 옵션 을 덮어 쓰 고 덤 프 와 동시에 압축 합 니 다. 
errors address 전용 저장 시 오류 메 시 지 를 지정 한 Email 주소 로 보 냅 니 다. 
ifemty 는 빈 파일 이라도 덤 프 합 니 다. 이것 은 logrotate 의 부족 한 옵션 입 니 다. 
notifempty 빈 파일 이 라면 저장 하지 않 습 니 다. 
mail address 는 저 장 된 로그 파일 을 지정 한 E - mail 주소 로 보 냅 니 다. 
nomail 덤 프 시 로그 파일 을 보 내지 않 습 니 다. 
olddir directory 에서 저장 한 로그 파일 을 지정 한 디 렉 터 리 에 넣 으 려 면 현재 로그 파일 과 같은 파일 시스템 에 있어 야 합 니 다. 
noolddir 덤 프 된 로그 파일 과 현재 로그 파일 을 같은 디 렉 터 리 에 두 었 습 니 다. 
rotate count 는 로그 파일 을 삭제 하기 전에 저장 하 는 횟수 를 지정 합 니 다. 0 은 백업 이 없 는 것 을 말 합 니 다. 5 는 5 개의 백업 을 유지 하 는 것 을 말 합 니 다. 
tabootext [+] list 는 logrotate 로 하여 금 지정 한 확장 자 를 저장 하지 않 게 합 니 다. 결 성 된 확장 자 는. rpm - orig,. rpmsave, v, 그리고 ~ 입 니 다. 
size size 로그 파일 이 지정 한 크기 에 도 달 했 을 때 저장 합 니 다. Size 는 bytes (결 성) 와 KB (size k) 또는 MB (size m) 를 지정 할 수 있 습 니 다. 
prerotate / endscript 저장 하기 전에 실행 해 야 할 명령 을 이 쌍 에 넣 을 수 있 습 니 다. 이 두 키 워드 는 따로 줄 을 지어 야 합 니 다.
post rotate / endscript 저장 후 실행 해 야 할 명령 을 이 쌍 에 넣 을 수 있 습 니 다. 이 두 키 워드 는 따로 줄 을 지어 야 합 니 다.
실례:
crontab -e
59 23 * * *  /usr/sbin/logrotate -f /etc/logrotate.d/nginx      # Nginx 로 그 를 모두 저장 합 니 다.
vi /etc/logrotate.d/nginx
/var/log/nginx/*.log {
        daily \ # 저장 주 기 를 매일 로 지정 합 니 다. 
        missingok
        rotate 52
        copress \ # gzip 압축 을 통 해 저장 한 로그
        delaycopress \ # copress 와 함께 사용 할 때 덤 프 된 로그 파일 은 다음 덤 프 때 압축 됩 니 다. 
        ifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
  #kill - USR 1 ` cat / var / run / nginx. pid 는 Nginx 프로 세 스 를 중단 하 는 것 이 아니 라 신 호 를 전달 하여 로 그 를 다시 만 듭 니 다. nginx 가 시작 되 지 않 으 면 작 동 하지 않 습 니 다.
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}
Q&A
1. logrotate 프로그램 이 실 행 된 상황 을 어떻게 테스트 합 니까?
답: / usr / sbin / logrotate - d / etc / logrotate. d / nginx
2. 로그 파일 의 구체 적 인 실행 상황 을 어떻게 봅 니까?
답: cat / var / lib / logrotate / status
3. - v 또는 - d 인 자 를 사용 할 때 log 가 회전 할 필요 가 없 음 을 표시 합 니 다.
답: logrotate 는 status 에 기록 되 지 않 은 파일 을 저장 할 때 status 에 이 파일 의 기록 을 추가 하고 작업 시간 을 당일 로 설정 합 니 다.이후 프로그램 이 이 파일 을 다시 저장 할 때 이 파일 이 오늘 이미 조작 되 었 음 을 발견 하고 더 이상 관련 작업 을 하지 않 습 니 다.
해결 방법: 1. vi / var / lib / logrotate / status 대응 하 는 파일 작업 날짜 변경
 2. - s 지정 상태 파일 사용
 
4. 분할 로그 타 임 스 오류: error: skipping "/ var / log / nginx / test. access. log" 부모 디렉토리 에 안전 하지 않 은 권한 이 있 기 때문에 ("root" 가 아 닌 그룹 에 의 해 쓰기 가능 하거나 쓰기 가능 합 니 다)
답: "su root list" 를 / etc / logrotate. d / nginx 파일 에 추가 하면 됩 니 다.
아래 와 같다.
/var/log/nginx/*.log {
        su root list
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        #ifempty
        create 0640 www-data adm
        sharedscripts
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

좋은 웹페이지 즐겨찾기