Red Hat Enterprise Linux Server 버전 6.6(San Diego) nginx 버전: nginx/1.0.15
일반적인 nginx logrotate 구성을 사용하고 logrotate는 잘 작동하며 nginx는 access.log 또는 error.log와 같은 새 로그 파일을 생성합니다.
# cat /etc/logrotate.d/nginx
/var/log/nginx/*log {
daily
rotate 4
missingok
notifempty
compress
sharedscripts
postrotate
/bin/kill -USR1 $(cat /var/run/nginx.pid 2>/dev/null) 2>/dev/null || :
endscript
}
그러나 한 번은 여유 공간이 부족해졌고 잠시 후 nginx가 삭제된 파일의 파일 설명자를 유지하고 있음을 발견했습니다. 서버 공간을 확보하는 유일한 방법은 nginx를 다시 시작하여 파일 설명자를 확보하는 것입니다.
어떤 아이디어가 있나요?
> [srv2 nginx]# logrotate -f /etc/logrotate.d/nginx
> [srv2 nginx]# lsof +L1
> COMMAND PID USER FD TYPE DEVICE SIZE/OFF NLINK NODE NAME
> vmtoolsd 1125 root 3u REG 253,3 4240 0 45 /tmp/vmware-root-2883746505/vmware-apploader-1125.log (deleted)
> nginx 38748 nginx 2w REG 253,4 1370362 0 674 /var/log/nginx/error.log.1 (deleted)
> nginx 38748 nginx 4w REG 253,4 1370362 0 674 /var/log/nginx/error.log.1 (deleted)
> nginx 38748 nginx 5w REG 253,4 0 0 220 /var/log/nginx/access.log (deleted)
> nginx 38748 nginx 6w REG 253,4 41819 0 693 /var/log/nginx/localhost.access.log.1 (deleted)
> nginx 38749 nginx 2w REG 253,4 1370362 0 674 /var/log/nginx/error.log.1 (deleted)
> nginx 38749 nginx 4w REG 253,4 1370362 0 674 /var/log/nginx/error.log.1 (deleted)
> nginx 38749 nginx 5w REG 253,4 0 0 220 /var/log/nginx/access.log (deleted)
> nginx 38749 nginx 6w REG 253,4 41819 0 693 /var/log/nginx/localhost.access.log.1 (deleted)
> nginx 38750 nginx 2w REG 253,4 1370362 0 674 /var/log/nginx/error.log.1 (deleted)
> nginx 38750 nginx 4w REG 253,4 1370362 0 674 /var/log/nginx/error.log.1 (deleted)
> nginx 38750 nginx 5w REG 253,4 0 0 220 /var/log/nginx/access.log (deleted)
> nginx 38750 nginx 6w REG 253,4 41819 0 693 /var/log/nginx/localhost.access.log.1 (deleted)
답변1
이는 정상적인 현상입니다. 재부팅하지 않고 로그를 "회전"할 수 있으므로 프로세스(실제로 모든 프로세스)는 설명자를 열어 둡니다.
postrotate
또는 를 사용하십시오 copytruncate
.
postrotate
kill -USR1 `cat /var/run/nginx.pid` &>/dev/null
endscript
신호는 USR1
우리에게 말해준다nginx로그 파일을 다시 로드합니다(따라서 설명자를 해제함).
답변2
이는 ModSecurity 저장소에서 제가 열었던 것과 똑같은 문제입니다. 참고로, nginx 지원을 위한 전문적인 유료 계약을 얻기 위해 spyderlabs에 연락했습니다. 그들이 nginx 지원 작업을 시작한 이후로는 소식을 듣지 못했습니다... 이제 다른 보류 중인 오류가 있기 때문에 nginx의 모든 mod_security 모듈을 일시적으로 중지했습니다. 아무런 해결책도 없이...