2008年1月16日水曜日

シェルスクリプトでstart/stop

スズキです。

以前、「シェルスクリプトでjavaのクラスを実行」
というエントリを書きました。
http://suz-lab.blogspot.com/2007/12/java.html

これは、今、運用実験している、suz-s2-quartzの
シェルから起動するためのものです。

※suz-s2-quartz
Seasar2コンポーネントをQuartzを使って
スケジューリングジョブとして実行する仕組み

運用していると、やっぱりJavaは一日一回再起動したいなー
ということになり、stop/startできるように
シェルスクリプトを強化しました。

ポイントはシェル変数$!で、直前に実行されたプロセス番号が
取得できるといったところでしょうか?

このプロセス番号をhoge.pidなどのファイルに保存して、
stopするときに、このファイルのpidを用いてkillしているって感じです。

--------rc.sh
#!/bin/sh

BASEDIR=/project/quartz/suz-s2-quartz

CLASSPATH=$BASEDIR/bin
for file in `ls $BASEDIR/lib`; do
  CLASSPATH=$CLASSPATH:$BASEDIR/lib/$file
done

CLASS=jp.co.iret.suz.s2.quartz.s2.S2Bootstrap

LOG=/project/quartz/log/current.log
PID=/project/quartz/run/current.pid

start() {
  DATE=`date`
  echo "" >> $LOG
  echo "######## start - $DATE" >> $LOG
  java -classpath $CLASSPATH $CLASS >> $LOG &
  echo $! > $PID
}

stop() {
  DATE=`date`
  echo "" >> $LOG
  echo "######## stop - $DATE" >> $LOG
  kill `cat $PID`;
  rm $PID
}

case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart)
    stop
    start
    ;;
  *)
    echo "Usage: s2quartz {start|stop|restart}"
    exit 1
esac
--------

そういえば、ロックの仕組みは入れてないなー?
Seasar2って普通にkillしても大丈夫なのかなー?
まだまだ勉強が足りない...

--

http://suz-lab.blogspot.com/

0 コメント: