#!/bin/sh # _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ # # 【機能概要】 : メモリ展開管理ファイル / マスタデータ / アクセスパターンファイル # の3つを共有メモリ上に展開する # # 【作成日】 : 2021.04.25 # # 【呼出形式】 : GG_SHMMEMLD.shl p1 p2 # p1 -c / -a / -d / -s / -l / -c1 / -c2 # p1 , p2 の説明 # -c : p2 で指定した[SHM-GROUP] (または all) の共有メモリのデータ展開と面切替を行う # -a : 共有メモリの再作成(削除および新規作成)を行う(共有メモリ管理ファイル定義全て) # -d : 共有メモリの削除を行う(共有メモリ管理ファイル定義全てを削除) # -s : 共有メモリの状態(ipcmコマンド)と共有メモリ管理ファイル定義とのチェックを行う # -l : 検索処理のログレベルを表示し、p2(0~9)を指定するとその値に変更する # -c1 : p2 で指定した[SHM-GROUP] (または all) の共有メモリのデータ展開を行う # -c2 : p2 で指定した[SHM-GROUP] (または all) の共有メモリの面切替を行う # # _/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/_/ #set -x . $GG_SHELLDIR/GG_DEF01.shl GG_PLATFORM_PROC . $GG_SHELLDIR/GG_SHMMEMLD_env.shl export CM_ENV_NAME=galaxygoby # $ECHO "=== CM_ENV_NAME=[${CM_ENV_NAME}] ===" PROGDIR=$CurDir/bin PROGNAME1=GG_SHM1001 PROGNAME2=GG_SHM1000 PROGNAME3=GG_SHM1009 SHLNAME=`\basename $0 | $AWK 'BEGIN{FS="."}{printf("%s",$1)}'` CLASSPATH=${CLASSPATH}:${CurDir}:lib TSV_SIZE_EDIT() { TARGET_SHMID_INFO=`$CurDir/shl/GG_SHMSZSET.shl $GG_SHM_TBLDEF $1` if [ $? -ne 0 ]; then #STATUS=$? STATUS=100 $ECHO "=== TSV_SIZE_EDITエラー TARGET_SHMID_INFO=($TARGET_SHMID_INFO) ===" $ECHO "=== $SHLNAME データ共有メモリ展開 異常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $ECHO "=== エラー内容は、$LOGDIR の GG_SHM1000_yyyymmdd.log ファイルを確認して下さい ===" \rm -f /tmp/$SHLNAME.$$.tmp* exit $STATUS fi #共有メモリグループID取得 SHMGID=`$ECHO $TARGET_SHMID_INFO | $AWK '{printf("%s",$1)}'` W_MAX_ROWS=`$ECHO $TARGET_SHMID_INFO | $AWK '{printf("%s",$2)}'` W_MAX_COLUMNS=`$ECHO $TARGET_SHMID_INFO | $AWK '{printf("%s",$3)}'` W_MAX_COLSIZE=`$ECHO $TARGET_SHMID_INFO | $AWK '{printf("%s",$4)}'` $ECHO "=== SHMGID=[$SHMGID] ===" #共有メモリグループデータサイズ取得 export GG_SHM1000_SHMID_ALLOCSIZE=`\grep $1 $GG_SHMID_MNGFILE | $AWK 'BEGIN{FS=","}{printf("%s",$4)}'` export GG_SHM1000_MAX_ROWS=$MAX_ROWS export GG_SHM1000_MAX_COLUMNS=$MAX_COLUMNS export GG_SHM1000_MAX_COLSIZE=$MAX_COLSIZE if [ -n "$W_MAX_ROWS" ]; then export GG_SHM1000_MAX_ROWS=$W_MAX_ROWS fi if [ -n "$W_MAX_COLUMNS" ]; then export GG_SHM1000_MAX_COLUMNS=$W_MAX_COLUMNS fi if [ -n "$W_MAX_COLSIZE" ]; then export GG_SHM1000_MAX_COLSIZE=$W_MAX_COLSIZE fi $ECHO "$GG_SHM1000_MAX_ROWS $GG_SHM1000_MAX_COLUMNS $GG_SHM1000_MAX_COLSIZE" | $AWK '{ printf("=== ( ROWS , COLUMNS , COLSIZE ) = ( %s , %s , %s )\n",$1,$2,$3 ) }' } CHANGE_ALL() { OPTION=$1 $ECHO "=== 起動オプション:$OPTION" $AWK 'BEGIN{FS=",";PRM=""}{ if ( substr($1,1,1)==";" ) next printf("%s/%s %s %s\n","'$PROGDIR'","'$PROGNAME2'",$1,"'$OPTION'") }' $GG_SHMID_MNGFILE > /tmp/$SHLNAME.$$.tmp1 $ECHO "=== $SHLNAME データ共有メモリ展開 開始 (" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" COUNT=1 MAXCT=`\wc -l /tmp/$SHLNAME.$$.tmp1 | $AWK '{printf("%s",$1)}'` while true do if [ $COUNT -gt $MAXCT ]; then break fi EXEC_PROC=`$AWK '(NR=='$COUNT'){printf("%s",$0)}' /tmp/$SHLNAME.$$.tmp1` #共有メモリグループID取得 SHMGID=`$ECHO $EXEC_PROC | $AWK '{printf("%s",$2)}'` TSV_SIZE_EDIT $SHMGID $EXEC_PROC if [ $? -ne 0 ]; then #STATUS=$? STATUS=100 $ECHO "=== $SHLNAME データ共有メモリ展開 異常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $ECHO "=== エラー内容は、$LOGDIR の GG_SHM1000_yyyymmdd.log ファイルを確認して下さい ===" \rm -f /tmp/$SHLNAME.$$.tmp1 exit $STATUS fi LASTLOGF=`\ls -t $LOGDIR/GG_SHM1000*.log | $AWK '(NR==1){print $1}'` \grep "使用率=" $LASTLOGF | $AWK '{ n=index($0,"GG_SHM1000"); A=sprintf("%s",substr($0,n)) }END{ printf("=== %s\n",A) }' $ECHO "=== $EXEC_PROC 正常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" COUNT=`\expr $COUNT + 1` done \rm -f /tmp/$SHLNAME.$$.tmp* } if [ "$1" = "-c" -a $# -eq 2 ]; then if [ "$2" = "all" ]; then CHANGE_ALL $1 else TSV_SIZE_EDIT $2 $ECHO "=== $SHLNAME データ共有メモリ展開 開始 (" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $PROGDIR/$PROGNAME2 $2 $1 if [ $? -eq 0 ]; then LASTLOGF=`\ls -t $LOGDIR/GG_SHM1000*.log | $AWK '(NR==1){print $1}'` \grep "使用率=" $LASTLOGF | $AWK '{ n=index($0,"GG_SHM1000"); A=sprintf("%s",substr($0,n)) }END{ printf("=== %s\n",A) }' $ECHO "=== $SHLNAME データ共有メモリ展開 正常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" else #STATUS=$? STATUS=100 $ECHO "=== $SHLNAME データ共有メモリ展開 異常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $ECHO "=== エラー内容は、$LOGDIR の GG_SHM1000_yyyymmdd.log ファイルを確認して下さい ===" exit $STATUS fi fi elif [ "$1" = "-c1" -a $# -eq 2 ]; then if [ "$2" = "all" ]; then CHANGE_ALL $1 else TSV_SIZE_EDIT $2 $ECHO "=== $SHLNAME データ共有メモリ展開(データ展開) 開始 (" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $PROGDIR/$PROGNAME2 $2 $1 if [ $? -eq 0 ]; then $ECHO "=== $SHLNAME データ共有メモリ展開(データ展開) 正常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" else #STATUS=$? STATUS=100 $ECHO "=== $SHLNAME データ共有メモリ展開(データ展開) 異常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $ECHO "=== エラー内容は、$LOGDIR の GG_SHM1000_yyyymmdd.log ファイルを確認して下さい ===" exit $STATUS fi fi elif [ "$1" = "-c2" -a $# -eq 2 ]; then if [ "$2" = "all" ]; then CHANGE_ALL $1 else TSV_SIZE_EDIT $2 $ECHO "=== $SHLNAME データ共有メモリ展開(面切替) 開始 (" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $PROGDIR/$PROGNAME2 $2 $1 if [ $? -eq 0 ]; then LASTLOGF=`\ls -t $LOGDIR/GG_SHM1000*.log | $AWK '(NR==1){print $1}'` \grep "使用率=" $LASTLOGF | $AWK '{ n=index($0,"GG_SHM1000"); A=sprintf("%s",substr($0,n)) }END{ printf("=== %s\n",A) }' $ECHO "=== $SHLNAME データ共有メモリ展開(面切替) 正常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" else #STATUS=$? STATUS=100 $ECHO "=== $SHLNAME データ共有メモリ展開(面切替) 異常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $ECHO "=== エラー内容は、$LOGDIR の GG_SHM1000_yyyymmdd.log ファイルを確認して下さい ===" exit $STATUS fi fi elif [ "$1" = "-a" -a $# -eq 1 ]; then \ipcrm $IPCRM $GG_SHM1001_MEMORYID $AWK 'BEGIN{FS=",";PRM=""}{ if ( substr($1,1,1)==";" ) next system ( "ipcrm '$IPCRM' " $2 " '$IPCRM' " $3 ) }' $GG_SHMID_MNGFILE $ECHO "=== $SHLNAME データ共有メモリ生成 開始 (" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $PROGDIR/$PROGNAME1 if [ $? -eq 0 ]; then $ECHO "=== $SHLNAME データ共有メモリ生成 正常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" else #STATUS=$? STATUS=100 $ECHO "=== $SHLNAME データ共有メモリ生成 異常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" $ECHO "=== エラー内容は、$LOGDIR の GG_SHM1000_yyyymmdd.log ファイルを確認して下さい ===" exit $STATUS fi CHANGE_ALL $1 $PROGDIR/$PROGNAME3 $GG_LogLevel > /tmp/$SHLNAME.$$.tmp2 \cat /tmp/$SHLNAME.$$.tmp2 | $AWK '{printf("=== %s ===\n",$0)}' \rm -f /tmp/$SHLNAME.$$.tmp* elif [ "$1" = "-d" -a $# -eq 1 ]; then \ipcrm $IPCRM $GG_SHM1001_MEMORYID $AWK 'BEGIN{FS=",";PRM=""}{ if ( substr($1,1,1)==";" ) next system ( "ipcrm '$IPCRM' " $2 " '$IPCRM' " $3 ) }' $GG_SHMID_MNGFILE $ECHO "=== $SHLNAME データ共有メモリ削除 正常終了(" `date '+%Y年 %m月 %d日 %H時 %M分 %S秒'`" )===" \ipcs $IPCS elif [ "$1" = "-s" -a $# -eq 1 ]; then $ECHO "_/_/_/_/_/ ipcs command result _/_/_/_/_/" \ipcs $IPCS $ECHO "_/_/_/_/_/ management-id _/_/_/_/_/" $ECHO "SHM_GROUP_ID,SHM_ID,LENGTH" $ECHO "MNG-ID,$GG_SHM1001_MEMORYID,$GG_SHM1001_MEMORYSZ" $ECHO "" $ECHO "_/_/_/_/_/ $GG_SHMID_MNGFILE file _/_/_/_/_/" $AWK '{ if(substr($0,length($0),1)=="\r"){print substr($0,1,length($0)-1)}else{print$0} }' $GG_SHMID_MNGFILE | tee -a /tmp/$SHLNAME.$$.tmp3 # \cat $GG_SHMID_MNGFILE \ipcs $IPCS | $AWK '{ if(substr($1,1,2)=="0x" && $1!="0x00000000") printf("%s %s\n",$1,$5) }' > /tmp/$SHLNAME.$$.tmp1 $AWK 'BEGIN{ FS="," PRM1=sprintf("0x%08x %s","'$GG_SHM1001_MEMORYID'","'$GG_SHM1001_MEMORYSZ'") FLG1=1 while ((getline LINE < "'/tmp/$SHLNAME.$$.tmp1'") > 0) { if ( LINE == PRM1 ) FLG1=0 } close ( "'/tmp/$SHLNAME.$$.tmp1'" ) if ( FLG1 == 1 ) printf("unmatch : MNG-ID,'$GG_SHM1001_MEMORYID','$GG_SHM1001_MEMORYSZ'\n") }{ if ( substr($1,1,1)==";" ) next PRM1=sprintf("0x%08x %s",$2,$4) PRM2=sprintf("0x%08x %s",$3,$4) FLG1=1 FLG2=1 while ((getline LINE < "'/tmp/$SHLNAME.$$.tmp1'") > 0) { if ( LINE == PRM1 ) FLG1=0 if ( LINE == PRM2 ) FLG2=0 } close ( "'/tmp/$SHLNAME.$$.tmp1'" ) if ( FLG1 == 1 ) printf("unmatch : %s,%s,xxxxxx,%s\n",$1,$2,$4) if ( FLG2 == 1 ) printf("unmatch : %s,xxxxxx,%s,%s\n",$1,$3,$4) }' /tmp/$SHLNAME.$$.tmp3 > /tmp/$SHLNAME.$$.tmp2 if [ `\wc -l /tmp/$SHLNAME.$$.tmp2 | $AWK '{printf("%s",$1)}'` -ne 0 ]; then $ECHO "" $ECHO "_/_/_/_/_/ unmach info / ipcs - $GG_SHMID_MNGFILE _/_/_/_/_/" \cat /tmp/$SHLNAME.$$.tmp2 $ECHO "" fi \rm -f /tmp/$SHLNAME.$$.tmp* elif [ "$1" = "-l" -a $# -eq 1 ]; then $PROGDIR/$PROGNAME3 > /tmp/$SHLNAME.$$.tmp \cat /tmp/$SHLNAME.$$.tmp | $AWK '{printf("=== %s ===\n",$0)}' \rm -f /tmp/$SHLNAME.$$.tmp elif [ "$1" = "-l" -a $# -eq 2 ]; then $PROGDIR/$PROGNAME3 $2 > /tmp/$SHLNAME.$$.tmp \cat /tmp/$SHLNAME.$$.tmp | $AWK '{printf("=== %s ===\n",$0)}' \rm -f /tmp/$SHLNAME.$$.tmp else $ECHO "Usage : $SHLNAME [ -c SHM-GROUP (or all) | -a | - d | -s | -l (設定値) | -c1 SHM-GROUP (or all) | -c2 SHM-GROUP (or all) ]" $ECHO " -c : [SHM-GROUP]で指定した共有メモリグループの変更(データ展開、面切替)を行う" $ECHO " -a : 共有メモリの再作成(削除および新規作成)を行う($GG_SHMID_MNGFILE の内容)" $ECHO " -d : 共有メモリの削除を行う($GG_SHMID_MNGFILE の内容を削除)" $ECHO " -s : 共有メモリの状態表示および $GG_SHMID_MNGFILE とのチェックを行う" $ECHO " -l : 共有メモリ検索処理のログレベルを表示(設定)を行う" $ECHO " -c1: [SHM-GROUP]で指定した共有メモリグループのデータ展開を行う" $ECHO " -c2: [SHM-GROUP]で指定した共有メモリグループの面切替を行う" exit 1 fi