脚本例子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