21.5.5 シェルスクリプトファイルの作成
(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 |
シェルスクリプトファイルでの設定内容のポイントを説明します。
- 論理サーバの停止
同一ホスト上の論理サーバを一括停止するように設定します。論理サーバの一括停止にはmngsvrutilコマンドを使用します。
ユーザ名とパスワードは引数として渡しています。これらの値は,mngsvrutilコマンドのクライアント側定義ファイル(.mngsvrutilrc)に記述して,適切なアクセス権を設定して管理するようにしてください。
また,mngsvrutilコマンドの-tオプションにはエイリアスIPアドレスを指定してください。
なお,mngsvrutilコマンドコマンドについては,マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「mngsvrutil(Management Serverの運用管理コマンド)」を参照してください。また,クライアント側定義ファイル(.mngsvrutilrc)については,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「10.15 .mngsvrutilrc(mngsvrutilコマンドのクライアント側定義ファイル)」を参照してください。
- 運用管理エージェントの停止
運用管理エージェントを停止するように設定します。運用管理エージェントの停止には,adminagentctl stopを使用します。
なお,adminagentctlコマンドについては,マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「adminagentctl(運用管理エージェントの起動と停止)」を参照してください。
(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 |
シェルスクリプトファイルでの設定内容のポイントを説明します。
- リカバリ処理に必要で,実行系ごとに異なる情報(エイリアス名,エイリアスIPアドレス,マウントディレクトリ)は,serversファイルの待機系のactcommandで,コマンドの引数として渡します。
- LD_LIBRARY_PATHなどの環境変数を明示的に指定する必要があります。環境変数については,マニュアル「Cosminexus アプリケーションサーバ システム構築・運用ガイド」の「7.3 環境変数の設定」を参照してください。
- cjlockfile関数を利用して,リカバリ処理が排他的に実行されるようにしています。この関数は,ファイルロックによるセマフォを提供しています。第1引数にスリープ時間(秒単位),第2引数にリトライ回数,第3引数にロックファイルを指定します。この関数では,第3引数で指定されたファイルがロックされている場合には,第1引数で指定した時間だけ待って再度ファイルロックの取得を試みます。第2引数に指定した回数分リトライしてもファイルロックが取得できない場合には,リカバリ処理に失敗します。ファイルをロックしているプロセスが存在しない場合は,ロックを横取りします。
- J2EEサーバ(MyServer)に対してcjstartrecoverでリカバリ処理を実行します。
- このサンプルでは,タイムアウト時間は600秒にしています。
- cjstartrecover コマンドの-pオプションで,ejbserver.distributedtx.ots.status.directory1キーに停止した実行系のステータスファイルディレクトリが指定されるようにしています。
- cjstartrecover コマンドの-pオプションで,vbroker.se.iiop_tp.hostキーに系切り替え後のエイリアスIPアドレスが指定されるようにしています。
- 停止した実行系ごとに異なるプロパティをcjstartrecover コマンドの-pオプションで上書き指定しています。
- J2EEサーバが複数の構成の場合には,cjstartrecoverコマンドをJ2EEサーバの数だけ実行します。その際,J2EEサーバ名(MyServer)とOTSのステータスファイルディレクトリのパスは適宜修正してください。
なお,cjstartrecoverコマンドについては,マニュアル「Cosminexus アプリケーションサーバ リファレンス コマンド編」の「cjstartrecover(J2EEサーバのトランザクション回復)」を参照してください。ejbserver.distributedtx.ots.status.directory1キーおよびvbroker.se.iiop_tp.hostキーについては,マニュアル「Cosminexus アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.4 usrconf.properties(J2EEサーバ用ユーザプロパティファイル)」を参照してください。