nginx用のログローテートを手動で設定する(ログのreopenについて)
2024年8月9日
Cent OS 7 上で、nginx のログ向けに logrotate を手動設定した時の方法をメモしておきます。
いきなり結論を書くと、
# vi /etc/logrotate.d/nginx
で、以下を入力・保存。
/var/log/nginx/*log { daily rotate 10 missingok notifempty sharedscripts compress delaycompress postrotate /usr/bin/nginx -s reopen >/dev/null 2>&1 || true endscript }
以下で反映。
# logrotate /etc/logrotate.conf
以下で反映を確認。
# less /var/lib/logrotate/logrotate.status
以上。
ポイントは、”nginx –s reopen” という記述。
Google 先生に聞くと、postrotate で ”kill –USR1 `cat /var/run/nginx.pid`” する方法、つまりローテート後に pid を指定して USR1 シグナルを送ってログを開き直してる例しか出てこない。実際、NGINXの公式サイトを確認しても、確かに Linux 向けの例はやっぱりそうなってる。
ただ、訳あって pid ファイルを参照したくなかったので、NGINX 公式サイトを漁ったところ、”-s reopen” オプションというものが用意されているらしく、
さらに、Windows 版の解説を読むと、”-s reopen” でログファイルを再オープンできる、との説明を発見。
ということで、ログの再オープンは ”nginx -s reopen” でも出来るよ。という事です。どっちが軽いかは、まぁ、推して知るべしだけども、違いは微々たるものでしょう。
なんでこんなことを調べたかと言うと、ウチは docker で nginx を動かしている絡みで、できれば pid のパスを書きたくなかったから。
ふと思ったけど、Windows 版だと、nginx を再起動しないでログの再オープンする方法って、これ以外無いよね…。