トラブルの原因はタイトル通り、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...
以上!