nginx でのログローテーション

nginx でのログローテーション

Nginxでログローテーションを行う例を見つけましたここ

しかし、次のような簡単なテストがあります:

    set $date "2018-08-24";
    access_log /home/tim/log/access-http-$date.log default;

という名前のログ ファイルが生成されますaccess-http-.log。私は nginx 1.13.6 (openresty 付き) を使用しています。

アップデート

何度もハッキングと調整を行った結果、nginx が生成するさまざまなログ ファイルをローテーションする次の logrotate スクリプトを思いつきました。これを /etc/logrotate に配置しました。残る問題は、ログが毎日ローテーションされないことです (現時点では理由は不明)。しかし、logrotate -f <filename>まさに私が望んでいる結果が得られます。

興味深いのは、nginx -s reloadUSR1 の代わりに使用できることです。残念ながら、これは nginx のログ ページでは参照されていませんが、私は見つけました (man ページだったと思います)。私は openresty/nginx を手動でビルドして、必要な追加モジュールを組み込んでいます。そのため、pid 保持などのパッケージ バージョンに付属するさまざまな追加機能は取得しません。

/path/to/log/access-http.log /path/to/log/access-https.log /path/to/log/api.log /path/to/log/error.log {
    daily
    missingok
    notifempty
    create 664 nobody tim
    dateext
    dateformat -%Y-%m-%d
    dateyesterday
    rotate 10
    su tim tim
    postrotate
        /usr/local/bin/openresty -s reload
    endscript
}

これは、Web ページと API の両方を提供する大規模な nginx 構成を持つすべての人にとって便利だと思います。私は https 以外のページを提供しないため、http を別々に保持し、スクリプト キディのゴミをページ ログから排除します。

答え1

ログファイルを移動し、日付で名前を変更し、USR1 信号を Nginx に送信するために、深夜 1 時までの 1 分間の cron タスクを設定するだけです。これにより、ログ ファイルが再度開かれ、翌日の新しいログ ファイルが作成されます。

59 23 * * * mv /var/log/nginx/access.log /var/log/nginx/$(date +%F).access.log && kill -USR1 $(cat /run/nginx.pid)

関連情報