Nginx 로그 회전이 제대로 작동하지 않는 것 같습니다.

Nginx 로그 회전이 제대로 작동하지 않는 것 같습니다.

내 파티션 설치가 가득 찼음을 발견했습니다 /var. 디스크 사용량을 추적하는 동안 내 Nginx 로그 파일이 상당히 크고 올바른 파일에 기록되지 않는 것 같다는 사실을 발견했습니다.

ls -ltr나에게 이것을 주었다 /var/log/nginx:

total 17170060
-rw-r----- 1 nobody adm   112315467 Apr 28  2015 access.log.14.gz
-rw-r----- 1 nobody adm    70554720 Apr 29  2015 access.log.13.gz
-rw-r----- 1 nobody adm    68145066 Apr 30  2015 access.log.12.gz
-rw-r----- 1 nobody adm    77951766 Dec  7 06:25 access.log.10.gz
-rw-r----- 1 nobody adm    81764378 Dec  8 06:25 access.log.9.gz
-rw-r----- 1 nobody adm    75397419 Dec  9 06:25 access.log.8.gz
-rw-r----- 1 nobody adm    68738862 Dec 10 06:25 access.log.7.gz
-rw-r----- 1 nobody adm    73802613 Dec 11 06:25 access.log.6.gz
-rw-r----- 1 nobody adm    66144521 Dec 12 06:25 access.log.5.gz
-rw-r----- 1 nobody adm    65385900 Dec 13 06:25 access.log.4.gz
-rw-r----- 1 nobody adm    68117105 Dec 14 06:25 access.log.3.gz
-rw-r----- 1 nobody adm    69441057 Dec 15 06:25 access.log.2.gz
-rw-r----- 1 nobody adm           0 Jan 20 06:25 access.log
-rw-r----- 1 nobody adm     7762196 Feb  1 09:45 error.log
-rw-r----- 1 nobody adm 16676558550 Feb  1 10:24 access.log.1

보시다시피 access.log.1파일이 작성되고 있습니다.

이것은 내 /etc/logrotate.d/nginx스크립트입니다.

/var/log/nginx/*.log {
        daily
        size 1G
        missingok
        rotate 10
        compress
        delaycompress
        notifempty
        create 0640 nobody adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
        endscript
}

관련 라인은 다음과 같습니다 /etc/nginx/nginx.conf.

pid /var/run/nginx.pid;
...snip...
    access_log /var/log/nginx/access.log;
    error_log /var/log/nginx/error.log;

고쳐 쓰다

오늘 아침에 확인해 보니 같은 문제가 있었습니다. 명령줄에서 실행 했는데 service nginx reload이전 파일이 해제되고 새 파일을 쓰기 시작했습니다. 기반으로이 게시물그리고 내 관찰은

[ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid\`

그리고

service nginx reload >/dev/null 2>&1

/etc/logrotate.d/nginx스크립트 에서 .

성공하면 다시 보고하겠습니다.

답변1

첫날

/etc/logrotate.d/nginxOP에서 언급한 대로 스크립트를 변경한 후...

/var/log/nginx/*.log {
        daily
        size 1G
        missingok
        rotate 10
        compress
        delaycompress
        notifempty
        create 0640 nobody adm
        sharedscripts
        prerotate
                if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
                        run-parts /etc/logrotate.d/httpd-prerotate; \
                fi \
        endscript
        postrotate
                service nginx reload >/dev/null 2>&1
        endscript
}

... access.log이름이 으로 올바르게 변경되고 access.log.1게시된 다음 새 항목을 작성하기 시작합니다 access.log. 그러나 gzip은 실행되지 않습니다 access.log.1.

다음날

파일 은 gzip으로 압축 access.log.1되었습니다 access.log.2. 나는 이 delaycompress지시어가 다음 날까지 로그 파일이 압축되는 것을 방지한다고 생각합니다. ls -ltr나에게 다음과 같은 출력을 제공합니다.

total 3344744
-rw-r----- 1 nobody adm   68738862 Dec 10 06:25 access.log.10.gz
-rw-r----- 1 nobody adm   73802613 Dec 11 06:25 access.log.9.gz
-rw-r----- 1 nobody adm   66144521 Dec 12 06:25 access.log.8.gz
-rw-r----- 1 nobody adm   65385900 Dec 13 06:25 access.log.7.gz
-rw-r----- 1 nobody adm   68117105 Dec 14 06:25 access.log.6.gz
-rw-r----- 1 nobody adm   69441057 Dec 15 06:25 access.log.5.gz
-rw-r----- 1 nobody adm  748290175 Feb  1 10:50 access.log.4.gz
-rw-r----- 1 nobody adm   58575628 Feb  2 08:32 access.log.3.gz
-rw-r----- 1 nobody adm   85585414 Feb  3 06:25 access.log.2.gz
-rw-r----- 1 nobody adm    8779427 Feb  4 02:39 error.log
-rw-r----- 1 nobody adm 2023509844 Feb  4 06:25 access.log.1
-rw-r----- 1 nobody adm   88608092 Feb  4 09:17 access.log

관련 정보