nginx 로그 절단 방법 2 가지
어렵 지 않 습 니 다. 몇 줄 의 스 크 립 트 만 있 으 면 됩 니 다.
#!/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
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
간단! Certbot을 사용하여 웹 사이트를 SSL(HTTPS)화하는 방법초보자가 인프라 주위를 정돈하는 것은 매우 어렵습니다. 이번은 사이트를 간단하게 SSL화(HTTP에서 HTTPS통신)로 변경하는 방법을 소개합니다! 이번에는 소프트웨어 시스템 Nginx CentOS7 의 환경에서 S...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.