2009年06月09日

catalina.outの肥大化

情けないことに、またまた自分のメンドくさがりの性格がトラブルを招いた。

トラブルの原因はタイトル通り、catalina.outが肥大化してディスク容量を食い潰したことだ。

そこにたどり着いたときに、あちゃ〜〜!って思った。この対応しないとなぁーって思っていたのをすっかり忘れてたから。

どうせ、まだ先のことだろうから後でいいかって思ったんだよなぁ。。。まったく気づかなかったことより性質が悪い。。。

まあ、とりあえずはファイル削除して、サーバー再起動して復旧完了。

今度こそ対策を実施しよう!

ログローテーションの方法には、既存の/usr/sbin/logrotateと、
rotatelogsコマンドというApacheのコマンドもある。
rotatelogsはApacheがインストールされていることが前提。

logrotateとrotatelogsの違いは以下を参照。
http://www.atmarkit.co.jp/flinux/rensai/apache14/apache14a.html

大きな違いは、logrotateはログファイルをクリアする。
rotatelogsはログファイルをクリアしない。
用途によって、使い分けが必要。

ログファイルを日付(%Y-%m-%d)で管理したいならば、rotatelogsのが
いい。logrotateの場合は不明。

そこで、色々調べた結果以下の方法を採用することにした。

・/usr/local/tomcat/bin/catalina.sh の編集。

 @ touch "$CATALINA_BASE"/logs/catalina.out のコメントアウト。
 A >> "$CATALINA_BASE"/logs/catalina.out 2>&1 & の部分を、
   | /usr/local/apache/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.out.%Y-%m-%d 86400 540 & で置き換え。(※2箇所ある)

これで、catalina.outのローテーションの仕組みが完成。

logrotateを使う場合は既に、/etc/logrotate.confがあるので、それで設定。

また、以下の内容のファイルを作成し、

/usr/local/tomcat/logs/catalina.out{
 missingok
 copytruncate
 daily
 rotate 31
 sharedscripts
 postrotate
    /bin/rm -f `date --d '32 days ago' '+*%Y-%m-%d.log'`
 endscript
}

を/etc/logrotate.dに保存するような手順になる。

・ログメンテナンスシェルの作成。

rotatelogsを利用する場合は、ログファイルをクリアしないので、
別途ログメンテのシェルを作成。

 #!/bin/sh
 # ログディレクトリ必ず最後に/をつける
 LOG_DIR=/usr/local/tomcat/logs/
 delfiles=`find ${LOG_DIR} -mmin +43200 -printf %p\\ ` #過去一ヶ月保存
 rm ${delfiles}

これを、cron.dailyに登録しておけば過去一ヶ月分のみのログだけになりディスクを食いつぶすことはなくなる。

これからは思い立ったらすぐやろう。後回しにすると必ず忘れてしまうのだから orz...

以上!

posted by hana at 11:47| Comment(0) | TrackBack(0) | Apache Software関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック