nginxがログのファイルの説明を保存するのはなぜですか?

nginxがログのファイルの説明を保存するのはなぜですか?

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私たちに教えてくれますログファイルを再ロードします(したがって記述子を解放します)。

答え2

これは、ModSecurityリポジトリで私が開いたのと同じ問題です。参考までに、nginxサポートのための専門的な有料契約を得るためにspyderlabsに連絡しました。彼らがnginxのサポートを始めて以来、あなたはニュースを聞くことができませんでした。何の解決策もなく...

関連情報