ログを回転させるときにApacheの再ロードを防ぐ方法は?

ログを回転させるときにApacheの再ロードを防ぐ方法は?

私は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

関連情報