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のサポートを始めて以来、あなたはニュースを聞くことができませんでした。何の解決策もなく...