0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

脚本例子3 健康检查

Posted at

#!/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

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?