por que nginx contém descrições de arquivos de logs?

2

no servidor Red Hat Enterprise Linux versão 6.6 (Santiago) versão nginx: nginx / 1.0.15

Eu uso a configuração comum do nginx logrotate, o logrotate funciona bem e o nginx cria um novo arquivo de log como access.log ou 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
}

No entanto, uma vez meu espaço livre ficou baixo e depois de um tempo eu descobri que o nginx mantém descritores de arquivos deletados. A única maneira de liberar espaço no servidor é reiniciar o nginx, portanto, descritores de arquivos gratuitos.

Alguma idéia?

>     [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)
    
por Ilja 08.04.2015 / 18:48

2 respostas

3

Isso é normal, você provavelmente "girou" o log sem reiniciar, então o processo (qualquer processo realmente) manteria o descritor aberto.

Use postrotate ou copytruncate . Isso é muito popular:

postrotate   
    kill -USR1 'cat /var/run/nginx.pid' &>/dev/null   
endscript

o sinal USR1 informa às para recarregar os arquivos de log ( liberando assim os descritores)

    
por 08.04.2015 / 19:40
0

Este é exatamente o mesmo problema que eu abri no repositório do ModSecurity. FYI, eu estive em contato com spyderlabs para um contrato pago profissional para apoiar nginx e eu não tenho ouvido falar deles desde que começaram a olhar para o suporte nginx ... Eu parei todos os módulos do mod_security no nginx por enquanto como eu tenho outros bugs pendentes sem soluções agora ...

    
por 09.04.2015 / 15:01