Nging 로 그 를 하늘 로 나 누 기

1674 단어
머리말
  • 인터넷 에는 kill - URS 1 방식 으로 nginx 에 새로운 로그 파일 을 만 드 는 경우 도 많 고 이런 방식 이 정확 하 다 고 불평 하 는 사람 도 많 습 니 다. 여기 서 이런 방식 이 매우 정확 하 다 는 것 을 알려 드 리 겠 습 니 다.나 는 시스템 이 자체 적 으로 가지 고 있 는 logrotates 를 보고 nginx 의 로그 분할 을 실현 하 며 bash 소스 코드 를 보 았 는데 이것 도 USR 1 이라는 신 호 를 보 냈 다.
  • 여기 서 USR 1 이라는 사용자 정의 신 호 를 설명 합 니 다. 제 가 특별히 숭배 하 는 소인 장 양 과 확인 한 결과 ubuntu 에서 대부분의 프로 세 스 가 이 신호 에 대한 반응 은 로그 파일 을 다시 생 성 하 는 것 이 고 현재 프로 세 스에 어떠한 영향 도 미 치지 않 습 니 다
  • 사고의 방향
  • bash 의 배열 과 for 를 이용 하여 로그 백업 코드 를 간소화 합 니 다
  • date 함 수 를 이용 하여 로그 백업 접 두 사 를 만 들 고 일 분할 효과
  • USR 1 신 호 를 이용 하여 nginx 에 새로운 로그 생 성
  • bash 스 크 립 트
  • 내 서버 에 백업 해 야 할 로그 파일 이 다른 디 렉 터 리 에 분포 되 어 있 기 때문에 내 스 크 립 트 는 적당 한 최적화 (코드 를 자세히 보면 이해 할 수 있 을 것 이다)
  • #!/bin/bash - 
    
    #1.nginx      
    first_path="/var/log/nginx/first"
    path_array=($first_path)
    
    #2.        
    first_prefix_sign="first"
    prefix_array=($first_prefix_sign)
    
    #3.            
    bool_array=("access" "error")
    
    #4.nginx        
    postfix=`date -d '+0 days' +%Y%m%d`".log"
    
    #5.         ,         
    for path in ${path_array[*]}
    do
    	for prefix in ${prefix_array[*]}
    	do
    		for bool in ${bool_array[*]}
    		do
    			file=$path/$prefix.$bool.log
    			backfile=$path/$prefix.$bool.$postfix
    			echo $file
    			echo $backfile
    			if [ -e $file ]
    			then
    				mv $file 	$backfile
    			fi
    		done
    	done
    done
    
    #6.  nginx   ,          
    nginx_pid=`ps -aux |grep -E 'nginx: master process'|grep -v 'grep'|awk '{print $2}'`
    #USR1:Reopen log files,  nginx    
    kill -USR1 $nginx_pid
    

  • 후기
    방문객 여러분, 오 실 때 적당 한 메 시 지 를 남 기 셨 는 지 토론 하고 소통 하 세 요.

    좋은 웹페이지 즐겨찾기