私はlogrotateを使用してApacheアクセスログ、エラーログを回転させ、ログを書き換えます。私の設定ファイルは次のとおりです。
/apache/*log {
compress
dateext
rotate 365
size=+300M
olddir /log/old/apache
notifempty
missingok
lastaction
/bin/apache reload
endscript
}
私の問題は、回転が発生するたびにApacheが回転したログファイルに何も書き込まないため、Apacheを再ロードする必要があることです。 logrotateが回転するたびにApacheが再ロードされるのを防ぐ方法はありますか?
答え1
Apacheが再ロードする必要があるのは、ファイルを開くとファイルハンドルを取得し、そのファイルハンドルに書き込みを続けるためです。ファイルを移動すると、この内容は表示されず、同じハンドルに記録され続けます。再ロードすると、ファイルが再び開き、新しいハンドルが作成されます。
再ロードしたくない場合は、ファイルを移動するのではなくファイルをコピーして古いファイルを消去できます。このようにして、Apacheは同じファイルハンドルに書き続けることができます。次のようにlogrotate構成ファイルに「copytruncate」オプションを追加するだけです。
/apache/*log {
copytruncate
compress
dateext
rotate 365
size=+300M
olddir /log/old/apache
notifempty
missingok
}
答え2
使用することをお勧めしますhttp://cronolog.org/
これが私が使用する方法です:
CustomLog "|/usr/local/sbin/cronolog -S /var/log/httpd/t3.CCC.eu-access_log -P /var/log/httpd/t3.CCC.eu-access_log.prev /var/log/httpd/t3.CCC.eu-%Y.log" combined