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がリロードしないようにする方法はありますか?
Apacheがリロードを必要とする理由は、ファイルを開くと、ファイルハンドルを取得し、そのファイルハンドルに書き込みを続けるためです。ファイルを移動しても、そのことはわかりません。同じハンドルに書き続けるだけです。リロードを実行すると、ファイルが再度開かれ、新しいハンドルが取得されます。
リロードを回避するには、ファイルを移動する代わりに、ファイルをコピーして古いファイルを空にします。そうすることで、Apacheは同じファイルハンドルへの書き込みを続けることができます。これを行うには、次のようにオプション "copytruncate"をlogrotate構成ファイルに追加します。
/Apache/*log {
copytruncate
compress
dateext
rotate 365
size=+300M
olddir /log/old/Apache
notifempty
missingok
}
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