logrotateの設定の仕方がよくわからないので、自分でログローテーションするスクリプトを作ってcronで実行するようにした。
なんとかの一つ覚えでPHPで。
「するようにした」とか軽く過去形でゆっちゃったけど、3年近く前のことなんだけど、今急に思い出したから書いとく。
仕様
- チェックするログファイルのサイズを確認して、それぞれ設定値を超えてたらログファイルバックアップ用ディレクトリに移動してサービスを再読込する。
- 移動後のファイル名は、「元ファイル名+bak+日付+通し番号」。
- 移動後、FTPやsambaで扱いやすいようにchownする。
- サービス再読込した旨をメールで報告。
- ログバックアップ用ディレクトリが指定サイズを超えたらメール報告。
- ルートシステムの入ってるパーティション空き容量が指定サイズを切ったらメール報告。
- 別スクリプトでバックアップファイルをzip圧縮。
実装
ログローテーションする人:logrotate.php
ZIPする人:ziplogs.php
ログローテーションは2時間毎ぐらいにcronで実行。
ZIPするのは、1日1回でも週1回でもいいけど、ログバックアップ用ディレクトリに置いて、そこに移動してから実行する。
crontabに書くなら、
0 15 * * * cd /home/genkikko/MyDocuments/logs/ ; nice -n 19 /usr/bin/php4 ziplogs.php
てな感じで、移動してから実行するように書く。ウチではおやつ時にniceでCPU優先度を最低にして毎日実行。