22.1.4 アンロード統計ログファイルを特定のサーバマシンに作成するシェルスクリプト
実行者 HiRDB管理者
HiRDB/パラレルサーバで運用している場合,各々のサーバマシンで取得したアンロード統計ログファイルを特定のサーバマシンのディレクトリ下に集めるには,シェルスクリプト(pdstjacm)が利用できます。ここでは,アンロード統計ログファイルを特定のサーバマシンに作成するシェルスクリプトについて説明します。
- 〈この項の構成〉
(1) pdstjacmの機能
pdstjacmは,HiRDBが提供するシェルスクリプトです。pdstjacmを実行すると,複数のサーバマシンで出力した統計ログを特定のサーバマシンのディレクトリ下に集められます。このため,pdstjacmの内容を変更するとユーザの環境に合った,アンロード統計ログファイルを作成できます。なお,pdstjacmの内容を変更しないときは,pdstjacmを実行したホストの$PDDIR/spool/stjfilesにアンロード統計ログファイルが集められます。pdstjacmの概要を次の図に示します。
|
|
- 〔説明〕
-
node1,node2,及びnode3の統計ログを$PDDIR/spool/stjfilesディレクトリ下に変更します。
(2) pdstjacmの内容
pdstjacmは,$PDDIR/binにpdstjacmとして格納されています。このため,pdstjacmの内容を変更する場合,シェルスクリプトをコピーしてください。また,pdstjacm以外に,OSのrcpコマンド(リモートコピー)やNFS(ネットワークファイルシステム)も利用できます。pdstjacmの内容を次に示します。
#!/bin/sh
# ALL RIGHTS RESERVED,COPYRIGHT (C) 1994,1995,HITACHI,LTD.
# LICENSED MATERIAL OF HITACHI,LTD.
# Name : pdstjacm
# Function : Collects statistics log files at host at which command is entered.
# Command Line : pdstjacm [sysdef filename]
# Command option: sysdef filename - If name of system common definition at local
# host is omitted, $PDCONFPATH/pdsys is assumed.
# Note : (1) Change the OUTDIR as required.
# (2) Statistic log file is collected for each host under a separate
# subdirectory of the $OUTDIR directory;
# the name of a subdirectory under $OUTDIR is the same as the
# correponding host name.
# (3) rcp command is used to transfer statistics log files between
# hosts.
# (4) A definition of pdstart operand and pdunit operand in definition
# files must not be written over several lines. If pdstart operand
# or pdunit operand is written over several lines in definition
# files, this command("pdstjacm") doesn't work correctly.
#
# (Example)
# pdstart -t SDS \ | |
# -s sds01 \ | -> | pdstart -t SDS -s sds01 -x host01
# -x host01 | |
#
# pdunit -u unt1 \ | |
# -x host01 \ | -> | pdunit -u unt1 -x host01 -d "/HiRDB_S"
# -d "/HiRDB_S" | |
#
# (5) When system switching occurs, this command("pdstjacm") doesn't
# work correctly. Change the hostname(s) of the executing system
# to the one(s) of the standby system, in order to collect the
# statistics log files of the standby system.
# (6) Pdstjacm shell is getten HiRDB operational directory name from
# system common definition file ($PDCONFPATH/pdsys or specified
# first argument). If pdunit operand in definition files is written
# over several lines in definition files, pdstjacm shell may be
# executed using $PDDIR in .cshrc on several local hosts.
# (7) If pdstart operands and/or pdunit operands are specified wrong
# in definition files, this command("pdstjacm") doesn't work
# correctly.
#
#******************************************************************************
## Definition for canceling processing when Signal is received
trap "echo processing is canceled.; exit 1" 1 2 15
## Definition of literals
OUTDIR=$PDDIR/spool/stjfiles ………………………………※1
## OUTDIR si directory under which statistics log files are collected.
## Modify as required.
## Checking of number of arguments
if [ $2 ] ; then
echo "Usage: $0 [input_file]"
echo "$0 processing is canceled."
exit 1
fi
## Checking of input definition file
if [ $# -eq 1 ]
then DEFFILE=$1
else DEFFILE=$PDCONFPATH/pdsys
fi
if [ ! -r $DEFFILE ] ; then
echo "$DEFFILE is not found or cannot be read."
echo "$0 processing is canceled."
exit 1
fi## Set host name in ${proc_host}.
proc_host=`cat $DEFFILE | sed -n '/^[ ]*pdunit.*[ ]-x/{s/.*[ ]-x//;p;}' \
| awk '{print $1}' - | sort | uniq`
set ${proc_host:=no_host_name}
if [ $1 = no_host_name ] ; then
proc_host=`cat $DEFFILE | sed -n '/^[ ]*pdstart.*[ ]-x/{s/.*[ ]-x//;p;}' \
| awk '{print $1}' - | sort | uniq`
set ${proc_host:=no_host_name}
## Validity checking of host name
if [ $1 = no_host_name ] ; then
echo "No host name to be processed."
echo "pdstjacm processing terminated."
exit 1
fi
fi
## Checking of transfer destination directory
if [ ! -d $OUTDIR ] ; then
mkdir $OUTDIR
fi
## Copy local host statistics log file …………………※3
set ${proc_host} ……………………………………………1
while [ $# -ne 0 ]
do
if [ ! -d $OUTDIR/$1 ] ; then
mkdir $OUTDIR/$1
fi
proc_dir=`cat $DEFFILE | /bin/grep '[ ]-x[ ]*'$1'[ ]' \
| sed -n '/^[ ]*pdunit/{s/.*[ ]-d//;p;}' | awk '{print $1}' -`
if [ -z "$proc_dir" ] ; then
proc_dir=`cat $DEFFILE | /bin/grep '[ ]-x[ ]*'$1'$' \
| sed -n '/^[ ]*pdunit/{s/.*[ ]-d//;p;}' | awk '{print $1}' -`
fi
## Validity checking of pddir name on pdunit operand
case ${proc_dir} in
/*)
rcp $1:$proc_dir/spool/pdstj1 $OUTDIR/$1
rcp $1:$proc_dir/spool/pdstj2 $OUTDIR/$1
;;
*)
rcp $1:'$'PDDIR/spool/pdstj1 $OUTDIR/$1 …………※2
rcp $1:'$'PDDIR/spool/pdstj2 $OUTDIR/$1
;;
esac
## rcp command is used to transfer statistics log files between hosts. …………※4
## Environment must be set up so that remote shell can be executed between hosts.
shift
done ……………………………………………2
## End of processing
echo "pdstjacm : Processing completed."
exit 0- 注※1
-
アンロード統計ログファイルを特定のサーバマシンに作成する場合は,$PDDIR/spool/stjfilesの部分を編集してください。
- 注※2
-
特定のサーバマシン上の統計ログファイルが取得できない場合は,'$'PDDIR/spool/pdstj1及び'$'PDDIR/spool/pdstj2の部分を編集してください。
- 注※3
-
系切り替え機能を使用して待機系にHiRDBの実行が切り替わった場合,このシェルを修正しないで実行すると,統計ログファイルを正しく取得できません。この場合は,シェル中の1.から2.までのスクリプトを次のように変更してください。
if[ ! -d $OUTDIR/HOST1 ] ; then mkdir $OUTDIR/HOST1 fi # HOST1の統計ロク゛ファイルのコヒ゜ー rcp HOST1:HOST1_pddir/spool/pdstj1 $OUTDIR/HOST1 rcp HOST1:HOST1_pddir/spool/pdstj2 $OUTDIR/HOST1 if [ ! -d $OUTDIR/HOST2 ] ; then mkdir $OUTDIR/HOST2 fi # HOST2の統計ロク゛ファイルのコヒ゜ー rcp HOST2:HOST2_pddir/spool/pdstj1 $OUTDIR/HOST2 rcp HOST2:HOST2_pddir/spool/pdstj2 $OUTDIR/HOST2
上記スクリプトを統計ログを出力したユニット数分,繰り返してください。ただし,次の定数は必要に応じて変更してください。
HOST1,HOST2:統計ログを出力したホスト名
HOST1_pddir,HOST2_pddir:統計ログを出力したHiRDB運用ディレクトリ
- 注※4
-
統計ログファイルを取得するときにrcpコマンドを使用するため,/etc/hosts.equivや$HOME/.rhostsなどを正しく設定してください。また,pdstjacmはコマンドを実行したサーバマシンの統計ログファイルもrcpコマンドで取得するため,/etc/hosts.equivや$HOME/.rhostsに自ホスト名を指定しておく必要があります。