19.5.5 シェルスクリプトファイルの作成
運用管理エージェントのプロセスを監視し,運用管理エージェントと論理サーバを起動および停止するために,次のシェルスクリプトファイルを作成します。
- 実行系(N台)の場合
-
実行系で設定が必要なシェルスクリプトファイルを次に示します。なお,N台で共通のコマンドを使用します。
-
運用管理エージェントのプロセスを監視するシェルスクリプトファイル
-
運用管理エージェントを起動するシェルスクリプトファイル
-
運用管理エージェントと論理サーバを停止するシェルスクリプトファイル
-
- 待機系(リカバリ専用1台)の場合
-
待機系で設定が必要なシェルスクリプトファイルを次に示します。なお,N台の実行系に対して共通のコマンドを使用し,差異はコマンドの引数で渡すようにします。
-
リカバリ処理を実行するシェルスクリプトファイル
-
各スクリプトについて説明します。
- 〈この項の構成〉
(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コマンドについては,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「mngsvrutil(Management Serverの運用管理コマンド)」を参照してください。また,クライアント側定義ファイル(.mngsvrutilrc)については,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「8.2.14 .mngsvrutilrc(mngsvrutilコマンドのクライアント側定義ファイル)」を参照してください。
-
運用管理エージェントの停止
運用管理エージェントを停止するように設定します。運用管理エージェントの停止には,adminagentctl stopを使用します。
なお,adminagentctlコマンドについては,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「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などの環境変数を明示的に指定する必要があります。環境変数については,マニュアル「アプリケーションサーバ システム構築・運用ガイド」の「4.1.10 環境変数とは」を参照してください。
-
cjlockfile関数を利用して,リカバリ処理が排他的に実行されるようにしています。この関数は,ファイルロックによるセマフォを提供しています。第1引数にスリープ時間(秒単位),第2引数にリトライ回数,第3引数にロックファイルを指定します。この関数では,第3引数で指定されたファイルがロックされている場合には,第1引数で指定した時間だけ待って再度ファイルロックの取得を試みます。第2引数に指定した回数分リトライしてもファイルロックが取得できない場合には,リカバリ処理に失敗します。ファイルをロックしているプロセスが存在しない場合は,ロックを横取りします。
-
J2EEサーバが複数の構成の場合には,cjstartrecoverコマンドをJ2EEサーバの数だけ実行します。その際,J2EEサーバ名(MyServer)とOTSのステータスファイルディレクトリのパスは適宜修正してください。
なお,cjstartrecoverコマンドについては,マニュアル「アプリケーションサーバ リファレンス コマンド編」の「cjstartrecover(J2EEサーバのトランザクション回復)」を参照してください。ejbserver.distributedtx.ots.status.directory1キーおよびvbroker.se.iiop_tp.hostキーについては,マニュアル「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.2.3 usrconf.properties(J2EEサーバ用ユーザプロパティファイル)」を参照してください。