うまいぼうぶろぐ

linuxとhttpdとperlのメモ

tomcatのcatalina.outを日付で自動ローテートするmemo

ref.

jsvc.exeで起動する場合は未対応。

CATALINA_HOME/bin/catalina.sh

スクリプト修正。

#touch "$CATALINA_BASE"/logs/catalina.out
### 中略
org.apache.catalina.startup.Bootstrap "$@" start 2>&1 \
| /usr/local/bin/rotatelogs "$CATALINA_BASE"/logs/catalina.%Y-%m-%d.log 86400 540 &
#      org.apache.catalina.startup.Bootstrap "$@" start \
#      >> "$CATALINA_BASE"/logs/catalina.out 2>&1 &
/path/to/symlink_catalina.sh
  1. catalina.outをtouchするところをコメント
  2. 標準出力をrotatelogsで日付付きのファイルにローテート
  3. 当日の日付のcatalinaログをcatalina.outにシンボリックリンクするシェルを実行

/path/to/symlink_catalina.sh

catalinaのログをcatalina.outにsymlinkするシェルを別で作った。

#!/bin/sh
CATALINA_BASE=/usr/local/tomcat
CATALINA_OUT=$CATALINA_BASE/logs/catalina.out
if [ -L $CATALINA_OUT -o ! -f $CATALINA_OUT ]; then
  ln -sf "$CATALINA_BASE"/logs/catalina.`date '+%Y-%m-%d'`.log $CATALINA_OUT
fi

catalina.outを最新のログにしておいたほうが管理しやすいため。
ex) catalina.2008-02-19.log => catalina.out

参照先のURLはtomcat起動時にシンボリックリンク作成してるけど、それだとtomcatを再起動しない限り、catalina.outが古い日付のログになってしまう。なのでこの処理を別のスクリプトにして、cronでも1日1回動かしておく。