脚本例子3 健康检查


#!/bin/bash

#ローカル用
RUN_HOME=/d/soft/autorun/ap-serv/AutoRun
CONF_ROOT=\$RUN_HOME/conf ; export CONF_ROOT
TMP_PATH=\$RUN_HOME/tmp ; export TMP_PATH
PROPERTY_FILE=AutoRun.conf ; export PROPERTY_FILE
FOR_HEALTH_CHECK_FILE_KEY=ForHealthCheckFilePath ; export FOR_HEALTH_CHECK_FILE_KEY
#前回チェック日時退避ファイル
LAST_TIME_FILE=$TMP_PATH/LastTimeFile
NORMAL=0
ERR=1
export LANG=C
CHECK_INT=50

# シェル起動時間秒を取得(システム時刻、死活判断処理にも使用される)
START_HI=`date +"%H"`
START_MI=`date +"%M"`
START_SS=`date +"%S"`

# シェル名
SHELLNAME=`basename $0`

# 開始ログ
echo `date +"%Y/%m/%d %H:%M:%S"` "INFO # ${SHELLNAME}#処理を開始します。"

# ヘルスチェックファイルパス取得
cat \$CONF_ROOT/\$PROPERTY_FILE | awk -F'=' 'BEGIN { KEYNAME=ENVIRON["FOR_HEALTH_CHECK_FILE_KEY"]; }\
{ len = length(\$1); \
if ( len > 3 ) {\
if ( \$1 == KEYNAME ) {\
printf "FOR_HEALTH_CHECK_FILE_PATH=%s; export FOR_HEALTH_CHECK_FILE_PATH\n", \$2;
}\
}\
}' > tmptmptmp_$$

FOR_HEALTH_CHECK_FILE_PATH=NOT_FOUND

#ローカル用
. ./tmptmptmp_\$\$
rm tmptmptmp_\$\$

if [ \$FOR_HEALTH_CHECK_FILE_PATH = NOT_FOUND ]
then
#ヘルスチェックファイルパス取得できない場合、
echo `date +"%Y/%m/%d %H:%M:%S"` "ヘルスチェックファイルパスが取得できません"
exit $ERR
fi

#ヘルスチェックファイルが存在するかチェック
if [ ! -f $FOR_HEALTH_CHECK_FILE_PATH ]
then
echo `date +"%Y/%m/%d %H:%M:%S"` "ヘルスチェックファイルが存在しません"
exit \$ERR
fi

#ヘルスチェックファイルから日時を取り出す
NOW_TIME=NOT_FOUND
read NOW_TIME < \$FOR_HEALTH_CHECK_FILE_PATH

#返却初期値
RETURN_CODE=\$NORMAL
SAVE_FLG=ON

#前回チェック日時退避ファイルから前回日時を取り出す
if [ -f \$LAST_TIME_FILE ]
then
#前回チェック日付退避ファイルあり、日時を比較する
#前回チェック日時取得
LAST_TIME=NOT_FOUND
read LAST_TIME < $LAST_TIME_FILE

#前回と今回日時の年月日を取得し、秒数に変換して差を取得する
NOW_YYYYMMDD="\`echo $NOW_TIME |awk '{printf("%s\n",substr($0,1,8))}'`"
LAST_YYYYMMDD="`echo $LAST_TIME |awk '{printf("%s\n",substr($0,1,8))}'`"
YMD_TO_S_VAL=`expr \( \`date -d "$NOW_YYYYMMDD" +%s\` - \`date -d "$LAST_YYYYMMDD" +%s\` \)`

#前回チェック日時の時刻をと取得する
LAST_HI="`echo $LAST_TIME |awk '{printf("%s\n",substr($0,9,2))}'`"
LAST_MI="`echo $LAST_TIME |awk '{printf("%s\n",substr($0,11,2))}'`"
LAST_SS="`echo $LAST_TIME |awk '{printf("%s\n",substr($0,13,2))}'`"

#システム・前回日時の時刻を秒数に変換する
START_VAL=`echo $START_HI |awk '{printf("%s\n",$1 * 60 * 60)}'`
START_VAL=`echo $START_MI $START_VAL |awk '{printf("%s\n",$1 * 60 + $2)}'`
START_VAL=`echo $START_SS $START_VAL |awk '{printf("%s\n",$1 + $2)}'`
LAST_VAL=`echo $LAST_HI |awk '{printf("%s\n",$1 * 60 * 60)}'`
LAST_VAL=`echo $LAST_MI $LAST_VAL |awk '{printf("%s\n",$1 * 60 + $2)}'`
LAST_VAL=`echo $LAST_SS $LAST_VAL |awk '{printf("%s\n",$1 + $2)}'`

#システム時刻と差を求める
DIF_VAL=`echo $YMD_TO_S_VAL $START_VAL $LAST_VAL |awk '{printf("%s\n", $2 - $3 + $1)}'`
if [ $DIF_VAL -le $CHECK_INT ]
then
    # 差が50秒以内の場合は、連続実行された場合と判定してヘルスチェック正常とする
    echo `date +"%Y/%m/%d %H:%M:%S"` "ヘルスチェックシェルが連続実行されました。正常終了します。"
    RETURN_CODE=$NORMAL
    SAVE_FLG=OFF
else
    #日時を比較する
    #echo "前回チェック日時=$LAST_TIME 今回日時=$NOW_TIME"
    if [ $NOW_TIME -le $LAST_TIME ]
    then
        #日時が前回日時より同じか以前の場合、自動RUNが動作していないと判断する
        echo `date +"%Y/%m/%d %H:%M:%S"` "自動RUNのスレッドは動作していません。"
        RETURN_CODE=$ERR
    fi
fi

fi

if [ \$SAVE_FLG = "ON" ]
then
#前回チェック日時ファイルに日時を退避する
echo \$NOW_TIME > \$LAST_TIME_FILE
fi

echo `date +"%Y/%m/%d %H:%M:%S"` "INFO # \${SHELLNAME}#処理を終了しました。"
exit $RETURN_CODE