サービス化してない apache のログローテート

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 することです。

コメントを残す