logrotate というツールがあります。
これはサーバーのログを定期にファイル名を変更して世代管理してくれるものです。
特に apache のログは定期的な整理、削除をしないと肥大化していってディスクを食いつぶしますのでこの手のツールは必須と言えます。
ところで、apache が yum でインストールされていれば話は簡単ですが、特定バージョンのソースを持ってきてビルドしてインストールしてある場合はちょっと困ったことになります。
普通、logrotate をインストールすると、自動的に apache のログ整理用の設定ファイルが出来ますが、apache がビルドインストールだと、それがうまくいきません。
標準の apache のインストール先にモジュールが無いのがいけないでしょうか。
そんなときの対処方法を書いておきます。
(1) logrotate ファイル構造
/etc/logrotate.conf /etc/logrotate.d/ acpid httpd mgetty munin ・ ・ ・ サービスやモジュール毎の設定ファイル諸々
通常、/etc/logrotate.d/httpd が apache用のローテート設定ファイルです。
しかし、apache がビルドインストールだとこのファイルが無かったり、在っても中の記述が対応できていなかったりします。
通常の/etc/logrotate.d/httpd
/var/log/httpd/*log { missingok notifempty sharedscripts delaycompress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript }
ただし、これは apache が yum でインストールされ、httpd スクリプトがサービスに登録されている場合用です。
自力で httpd スクリプトをサービスに登録し、ログの出力先が /var/log/httpd/ ならこのまま使えます。
しかし、apache がビルドインストールだと、apache の起動スクリプト httpd 自体が存在しないとか サービスに登録されていないという環境があります。
途中からサーバーの管理を任されると、それはもうよくそういうことがあります。
(2) apache ビルド版の環境
apache がビルドインストールだと、よくあるパターンではこうなっています。
/usr/local/apache2/bin/ ここにプログラム /usr/local/apache2/logs/ ここにログと httpd.pid または /var/log/apache2/ ここにログ
(3) apache ビルド版用の logrotate設定
仮に/var/log/apache2/ ここにログがある場合は、こうすればうまくいきます。
/etc/logrotate.d/httpd
/var/log/apache2/*log { missingok notifempty sharedscripts delaycompress postrotate /bin/kill -HUP `cat /usr/local/apache2/logs/httpd.pid 2>/dev/null` 2> /dev/null || true endscript }
※ポイントは httpd.pid に記録されているプロセスIDを使って -HUP することです。