
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 reload
USR1 の代わりに使用できることです。残念ながら、これは 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)