last update 2017年5月17日 9:42

nginx用のログローテートを手動で設定する(ログのreopenについて)

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 を再起動しないでログの再オープンする方法って、これ以外無いよね…。

コメントを記入