nginx 로그 절단 셸 스 크 립 트

4932 단어
대본 사고
첫 번 째 단 계 는 로그 파일 의 이름 을 바 꾸 는 것 입 니 다. 이름 을 바 꾼 후 nginx 에서 로그 파일 을 찾 지 못 해 로 그 를 잃 어 버 릴 염려 는 없습니다.원래 이름 의 로그 파일 을 다시 열지 않 기 전에 nginx 는 이름 을 바 꾼 파일 에 로 그 를 씁 니 다. Liux 는 파일 이름 이 아 닌 파일 설명자 로 로 그 를 씁 니 다.두 번 째 단 계 는 nginx 메 인 프로 세 스에 usr 1 신 호 를 보 냅 니 다.nginx 메 인 프로 세 스 는 신 호 를 받 으 면 설정 파일 에서 로그 파일 이름 을 읽 고 로그 파일 을 다시 엽 니 다 (설정 파일 의 로그 이름 으로). 작업 프로 세 스 의 사용 자 를 로그 파일 의 소유자 로 합 니 다.로그 파일 을 다시 열 면 nginx 메 인 프로 세 스 는 이름 이 바 뀐 로그 파일 을 닫 고 작업 프로 세 스에 게 새로 열 린 로그 파일 을 사용 하 라 고 알 립 니 다.작업 프로 세 스 는 즉시 새 로그 파일 을 열 고 이름 이 바 뀐 로그 파일 을 닫 습 니 다.그리고 오래된 로그 파일 을 처리 할 수 있 습 니 다.
2. 스 크 립 트 실현
nginx 로 그 는 날짜 에 따라 스 크 립 트 를 다음 과 같이 자동 으로 자 릅 니 다.
?
1
2
3
4
5
6
7
8
9
10
11
12
13 #nginx
  #!/bin/bash # logs_path= "/usr/local/nginx/logs/" # pid pid_path= "/usr/local/nginx/nginx.pid"
  # mv ${logs_path}access.log ${logs_path}access_$( date -d  "yesterday" + "%y%m%d" ).log
  # nginx kill -usr1 ` cat ${pid_path}`
시험 환경:
?
1
2
3
4
5 # cat /etc/redhat-release red hat enterprise linux server release 5.3 (tikanga)
  # /opt/nginx/nginx -v nginx version: nginx /1 .6.2
코드:
?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 #!/bin/bash # ============================================================================== # chmod u+x /opt/nginx/cut_nginx_log.sh # crontab -e # 0 0 * * * /opt/nginx/cut_nginx_log.sh > /opt/nginx/logs/cut_nginx_log.log 2>&1 # ==============================================================================
  logs_path= "/opt/nginx/logs" archive_year=$( date -d  "yesterday" "+%y" ) archive_month=$( date -d  "yesterday" "+%m" ) archive_date=$( date -d  "yesterday" "+%y%m%d_%h%m%s" ) if [ -r  /opt/nginx/nginx .pid ];  then    mkdir -p  "${logs_path}/${archive_year}/${archive_month}"    mv "${logs_path}/access.log" "${logs_path}/${archive_year}/${archive_month}/access_${archive_date}.log"    kill -usr1 $( cat "/opt/nginx/nginx.pid" )    sleep 1    gzip "${logs_path}/${archive_year}/${archive_month}/access_${archive_date}.log" else    echo "nginx might be down" fi
  # ============================================================================== # clean up log files older than 100 days # ==============================================================================
  # change housekeeping=1 to enable clean up housekeeping=0 keep_days=100 if [ $housekeeping == 1 ];  then    if [ -d  "${logs_path}" ];  then      find "${logs_path}" - type f -name  "access_*.log.gz" -mtime +${keep_days} - exec rm -f {} \;    fi fi
참고:http://wiki.nginx.org/logrotation
위 스 크 립 트 nginx 저장log. sh, 정시 절단 작업 설정
3. 정시 작업 은 crontab 에서 작업 을 설정 합 니 다.
 코드 는 다음 과 같 습 니 다:
0 0 * * * bash /usr/local/nginx/nginx_log.sh
이렇게 하면 매일 0 시 0 분 에 nginx 로 그 를 날짜 형식 으로 바 꾸 고 오늘 의 새 로그 파일 을 다시 생 성 합 니 다.
다음으로 전송:https://blog.51cto.com/14354846/2408310

좋은 웹페이지 즐겨찾기