21.5.5 シェルスクリプトファイルの作成

運用管理エージェントのプロセスを監視し,運用管理エージェントと論理サーバを起動および停止するために,次のシェルスクリプトファイルを作成します。

実行系(N台)の場合
実行系で設定が必要なシェルスクリプトファイルを次に示します。なお,N台で共通のコマンドを使用します。
  • 運用管理エージェントのプロセスを監視するシェルスクリプトファイル
  • 運用管理エージェントを起動するシェルスクリプトファイル
  • 運用管理エージェントと論理サーバを停止するシェルスクリプトファイル
待機系(リカバリ専用1台)の場合
待機系で設定が必要なシェルスクリプトファイルを次に示します。なお,N台の実行系に対して共通のコマンドを使用し,差異はコマンドの引数で渡すようにします。
  • リカバリ処理を実行するシェルスクリプトファイル

各スクリプトについて説明します。

<この項の構成>
(1) 運用管理エージェントのプロセスを監視するシェルスクリプトファイル
(2) 運用管理エージェントを起動するシェルスクリプトファイル
(3) 運用管理エージェントと論理サーバを停止するシェルスクリプトファイル
(4) リカバリ処理を実行するシェルスクリプトファイル

(1) 運用管理エージェントのプロセスを監視するシェルスクリプトファイル

運用管理エージェントのプロセスを監視するシェルスクリプトファイルの例(monitor.sh)を次に示します。

#!/bin/sh

LOGDIR=/home/manager/hamon/log
AA=/opt/Cosminexus/manager/bin/adminagent

logg()
{
   echo `date '+[%Y/%m/%d %H:%M:%S]'`"[$$]: $1" ¥
       >> ${LOGDIR}/adminagent.log 2>&1
}

logg "### $0: started. ###"
while true
do
   CHECK=`ps -ef | grep $AA | grep -v grep`

   if [ "$CHECK" = "" ]
   then
       logg "### $0: stop. ###"
       exit 0
   fi
   sleep 10
done

この例では,運用管理エージェントのプロセスが存在しているかどうかを10秒おきに監視しています。

(2) 運用管理エージェントを起動するシェルスクリプトファイル

運用管理エージェントを起動するためのシェルスクリプトファイルの例(start.sh)を次に示します。

#!/bin/sh

LOGDIR=/home/manager/hamon/log
MNGDIR=/opt/Cosminexus/manager

logg()
{
   echo `date '+[%Y/%m/%d %H:%M:%S]'`"[$$]: $1" ¥
       >> ${LOGDIR}/adminagent.log 2>&1
}

# start Administration Agent
logg "### $0: starting Administration Agent. ###"
$MNGDIR/bin/adminagentctl start
if [ $? -eq 0 ] ; then
 logg "### $0: Administration Agent start normally. ###"
else
 logg "### $0: Administration Agent cannot start. ###"
 exit 1
fi

exit 0

(3) 運用管理エージェントと論理サーバを停止するシェルスクリプトファイル

運用管理エージェントと論理サーバを停止するためのシェルスクリプトファイルの例(stop.sh)を次に示します。

#!/bin/sh

LOGDIR=/home/manager/hamon/log
MNGDIR=/opt/Cosminexus/manager

logg()
{
   echo `date '+[%Y/%m/%d %H:%M:%S]'`"[$$]: $1" ¥
       >> ${LOGDIR}/adminagent.log 2>&1
}

# stop logical server
logg "### $0: stop logical servers. ###"
$MNGDIR/bin/mngsvrutil -m mnghost:28080 -u admin -p admin ¥
                           -t 172.16.12.31 -k host -s stop server

# stop Administration Agent
logg "### $0: stopping Administration Agent. ###"
$MNGDIR/bin/adminagentctl stop

exit 0

シェルスクリプトファイルでの設定内容のポイントを説明します。

(4) リカバリ処理を実行するシェルスクリプトファイル

各J2EEサーバに対してリカバリ処理を実行するためのシェルスクリプトファイルの例(recover.sh)を次に示します。

#!/bin/sh

LOGDIR=/home/manager/hamon/log
PATH=/opt/Cosminexus/CC/server/bin:/bin:/usr/bin:/home/manager/hamon/bin
LD_LIBRARY_PATH=/opt/DABroker/lib:/opt/Cosminexus/jdk/lib:/opt/Cosminexus/TPB/lib:/opt/Cosminexus/PRF/lib:/opt/Cosminexus/CTM/lib:/bin:/opt/HiRDB/client/lib:/opt/oracle/app/oracle/product/10.1.0/client_1/lib:/opt/oracle/app/oracle/product/10.1.0/client_1/lib/libclntsh.so.10.1:/opt/oracle/app/oracle/product/10.1.0/client_1/lib/libclntsh.so
export LD_LIBRARY_PATH

LOCKFILE=/var/lock/kosmi_recover.lock
SLEEP_TIME=60
RETRIES=30
STATUS_PATH=$3/otsstatus

cjlockfile()
{
   counter=$2
   TMP_LOCK_FILE=`dirname $3`/$$.lock
   echo $$ > $TMP_LOCK_FILE

   if [ -f $3 ]
   then
       kill -0 `cat $3` 2>/dev/null || rm -f $3
   fi

   until ln $TMP_LOCK_FILE $3 2>/dev/null
   do
       counter=`expr $counter - 1`
       if [ $counter -le 0 ]
       then
           rm -f $TMP_LOCK_FILE
           return 1
       fi
       sleep $1
   done

   rm -f $TMP_LOCK_FILE
   return 0
}

logg()
{
   echo `date '+[%Y/%m/%d %H:%M:%S]'`"[$$]: $1" ¥
       >> ${LOGDIR}/adminagent.log 2>&1
}

if cjlockfile ${SLEEP_TIME} ${RETRIES} ${LOCKFILE}
then
   logg "### $0: started for $1 ###"
   cjstartrecover MyServer -p vbroker.se.iiop_tp.host=$2 ¥
                 -p ejbserver.distributedtx.ots.status.directory1=$STATUS_PATH ¥
                 -t 600
   logg "### $0: ended. $? ###"
fi

rm -f $LOCKFILE

exit 0

シェルスクリプトファイルでの設定内容のポイントを説明します。

なお,cjstartrecoverコマンドについては,マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartrecover(J2EEサーバのトランザクション回復)」を参照してください。ejbserver.distributedtx.ots.status.directory1キーおよびvbroker.se.iiop_tp.hostキーについては,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.4 usrconf.properties(J2EEサーバ用ユーザプロパティファイル)」を参照してください。