#!/bin/bash
PATH=/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin
ROOT=/data/dv_mon/dv_appchk
mail_file()
{
# usage: mail_file "SUBJECT" MAIL_FILE
SUBJECT=$1
MAIL_FILE=$2
[[ ! -f $MAIL_CONF ]] && return
. $MAIL_CONF
env MAILRC=/dev/null from="$SENDER" smtp="$SMTP_SVR" \
smtp-auth-user="$SMTP_USR" smtp-auth-password="$SMTP_PSW" smtp-auth=login \
nail -n -s "$SUBJECT" "$TO_WHO" < $MAIL_FILE
}
pre_chk()
{
echo "[$(date +%c)] pre_chk(): Begin." >> $LOG0
LOG1=$LOG0.1
LOG2=$LOG0.2
LOG3=$LOG0.3
MAIL_TMP=$RUN/mail.tmp
cat /dev/null > $MAIL_TMP
touch $HIS_LOG
# CHK_RESULT: {_OK|_RESTART_OK|_START_FAIL|_STOP_FAIL}
CHK_RESULT=""
NEED_MAIL=no
# get hostname
HOST_NAME=$(hostname | awk -F'.' '{print $1}')
# get ip address
for iface in eth0 eth0:1 eth1
do
ETH_IF=$(ifconfig $iface | awk -F: '/inet addr/{split($2,a," ") ; print a[1]}')
[[ ! -z $ETH_IF ]] && break
done
# exit if can not get hostname or ip address
if [[ -z $HOST_NAME || -z $ETH_IF ]]
then
echo "[$(date +%c)] pre_backup(): Can not get hostname or IP address!" >> $LOG0
exit
fi
# check lock file
if [[ ! -f $LOCK_FILE ]]
then
touch $LOCK_FILE
else
LOCK_FILE_TIME=$(ls -l --time-style=+%s $LOCK_FILE | awk '{print $6}')
NOW_TIME=$(date +%s)
if (( NOW_TIME - LOCK_FILE_TIME < LOCK_FILE_TIMEOUT ))
then
echo "[$(date +%c)] pre_chk(): Check is still running. Exit now." >> $LOG0
exit
else
echo "[$(date +%c)] pre_chk(): Last check out of timeout $LOCK_FILE_TIMEOUT. Check now." >> $LOG0
rm -f $LOCK_FILE
fi
fi
}
chk_port()
{
echo "[$(date +%c)] chk_port(): Begin." >> $LOG0
netstat -tunlp > $RUN/netstat.tmp 2>&1
grep "\:$APP_PORT\>" $RUN/netstat.tmp > /dev/null 2>&1
ret=$?
if (( ret == 0 ))
then
PORT_STATUS="up"
else
echo "quit" | telnet localhost $APP_PORT | col -b | grep "Connected" > /dev/null 2>&1
ret=$?
if (( ret == 0 ))
then
PORT_STATUS="up"
else
sleep 3
echo "quit" | telnet localhost $APP_PORT | col -b | grep "Connected" > /dev/null 2>&1
ret=$?
if (( ret == 0 ))
then
PORT_STATUS="up"
else
PORT_STATUS="down"
echo "[$(date +%c)] chk_port(): PORT_STATUS = $PORT_STATUS" >> $MAIL_TMP
cat $RUN/netstat.tmp >> $MAIL_TMP
fi
fi
fi
echo "[$(date +%c)] chk_port(): Return PORT_STATUS = $PORT_STATUS." >> $LOG0
rm -f $RUN/netstat.tmp
}
chk_proc()
{
echo "[$(date +%c)] chk_proc(): Begin." >> $LOG0
CHK_URL="http://localhost:${APP_PORT}${CHK_URI}"
WGET_OPT="-v -d -t 2 -O /dev/null -S -T 8 -w 5 --proxy=off"
wget $WGET_OPT "$CHK_URL" 2>&1 | col -b > $RUN/wget.tmp
grep '200 OK' $RUN/wget.tmp > /dev/null 2>&1
ret=$?
if (( ret == 0 ))
then
PROC_STATUS="up"
else
sleep 3
wget $WGET_OPT "$CHK_URL" 2>&1 | col -b > $RUN/wget.tmp.1
grep '200 OK' $RUN/wget.tmp.1 > /dev/null 2>&1
ret=$?
if (( ret == 0 ))
then
PROC_STATUS="up"
else
PROC_STATUS="down"
echo "[$(date +%c)] chk_proc(): PROC_STATUS = $PROC_STATUS" >> $MAIL_TMP
cat $RUN/wget.tmp $RUN/wget.tmp.1 >> $MAIL_TMP
fi
fi
echo "[$(date +%c)] chk_proc(): Return PROC_STATUS = $PROC_STATUS." >> $LOG0
rm -f $RUN/wget.tmp $RUN/wget.tmp.1
}
start_app()
{
echo "[$(date +%c)] start_app(): Begin." >> $LOG0
$APP_CTRL start > /dev/null 2>&1
sleep 3
}
stop_app()
{
echo "[$(date +%c)] stop_app(): Begin." >> $LOG0
$APP_CTRL stop > /dev/null 2>&1
sleep 3
}
post_chk()
{
if [[ $NEED_MAIL == yes ]]
then
mail_file "APPCHK_${HOST_NAME}[$ETH_IF]:$CHK_RESULT" $MAIL_TMP
fi
# delete mail temp file
rm -f $MAIL_TMP
# delete lock file
rm -f $LOCK_FILE
}
main_chk()
{
echo "[$(date +%c)] main_chk(): Begin." >> $LOG0
case "${CHK_PORT}_${CHK_PROC}" in
enable_enable)
echo "[$(date +%c)] main_chk(): CHK_PORT = $CHK_PORT, CHK_PROC = $CHK_PROC." >> $LOG0
chk_port
chk_proc
if [[ $PORT_STATUS == up && $PROC_STATUS == up ]]
then
# Status OK
echo "[$(date +%c)] main_chk(): PORT_STATUS = $PORT_STATUS, PROC_STATUS = $PROC_STATUS." >> $LOG0
echo "[$(date +%c)] main_chk(): $APP_NAME status OK." >> $LOG0
else
# Port down or process down
stop_app
chk_port
chk_proc
if [[ $PORT_STATUS == down && $PROC_STATUS == down ]]
then
# Stop application success
start_app
chk_port
chk_proc
if [[ $PORT_STATUS == up && $PROC_STATUS == up ]]
then
# Start application success
NEED_MAIL=yes
CHK_RESULT="${APP_NAME}_port_${APP_PORT}_RESTART_OK:${CHK_RESULT}"
echo "[$(date +%c)] APP_NAME:$APP_NAME APP_PORT:$APP_PORT RESTART_OK" | tee -a $MAIL_TMP >> $HIS_LOG
echo "[$(date +%c)] main_chk(): PORT_STATUS = $PORT_STATUS, PROC_STATUS = $PROC_STATUS." >> $LOG0
echo "[$(date +%c)] main_chk(): Restart $APP_NAME success." >> $LOG0
else
# Fail to start application
NEED_MAIL=yes
CHK_RESULT="${APP_NAME}_port_${APP_PORT}_START_FAIL:${CHK_RESULT}"
echo "[$(date +%c)] APP_NAME:$APP_NAME APP_PORT:$APP_PORT START_FAIL" | tee -a $MAIL_TMP >> $HIS_LOG
echo "[$(date +%c)] main_chk(): PORT_STATUS = $PORT_STATUS, PROC_STATUS = $PROC_STATUS." >> $LOG0
echo "[$(date +%c)] main_chk(): Can not start $APP_NAME." >> $LOG0
fi
else
# Fail to stop application
NEED_MAIL=yes
CHK_RESULT="${APP_NAME}_port_${APP_PORT}_STOP_FAIL:${CHK_RESULT}"
echo "[$(date +%c)] APP_NAME:$APP_NAME APP_PORT:$APP_PORT STOP_FAIL" | tee -a $MAIL_TMP >> $HIS_LOG
echo "[$(date +%c)] main_chk(): PORT_STATUS = $PORT_STATUS, PROC_STATUS = $PROC_STATUS." >> $LOG0
echo "[$(date +%c)] main_chk(): Can not stop $APP_NAME." >> $LOG0
fi
fi
;;
disable_disable)
echo "[$(date +%c)] main_chk(): CHK_PORT = $CHK_PORT, CHK_PROC = $CHK_PROC." >> $LOG0
echo "[$(date +%c)] main_chk(): Check disabled $APP_NAME." >> $LOG0
;;
enable_disable|disable_enable)
echo "[$(date +%c)] main_chk(): CHK_PORT = $CHK_PORT, CHK_PROC = $CHK_PROC." >> $LOG0
[[ $CHK_PORT == enable && $CHK_PROC == disable ]] && CHK_LOGIC=chk_port && CHK_STATUS=PORT_STATUS
[[ $CHK_PORT == disable && $CHK_PROC == enable ]] && CHK_LOGIC=chk_proc && CHK_STATUS=PROC_STATUS
$CHK_LOGIC
REAL_STATUS=$(eval echo '$'$CHK_STATUS)
if [[ $REAL_STATUS == up ]]
then
# Status OK
echo "[$(date +%c)] main_chk(): $CHK_STATUS = $REAL_STATUS." >> $LOG0
echo "[$(date +%c)] main_chk(): $APP_NAME status OK." >> $LOG0
else
# Port down or process down
stop_app
$CHK_LOGIC
REAL_STATUS=$(eval echo '$'$CHK_STATUS)
if [[ $REAL_STATUS == up ]]
then
# Fail to stop application
NEED_MAIL=yes
CHK_RESULT="${APP_NAME}_port_${APP_PORT}_STOP_FAIL:${CHK_RESULT}"
echo "[$(date +%c)] APP_NAME:$APP_NAME APP_PORT:$APP_PORT STOP_FAIL" | tee -a $MAIL_TMP >> $HIS_LOG
echo "[$(date +%c)] main_chk(): $CHK_STATUS = $REAL_STATUS." >> $LOG0
echo "[$(date +%c)] main_chk(): Can not stop $APP_NAME." >> $LOG0
else
# Stop application success
start_app
$CHK_LOGIC
REAL_STATUS=$(eval echo '$'$CHK_STATUS)
if [[ $REAL_STATUS == up ]]
then
# Start application success
NEED_MAIL=yes
CHK_RESULT="${APP_NAME}_port_${APP_PORT}_RESTART_OK:${CHK_RESULT}:"
echo "[$(date +%c)] APP_NAME:$APP_NAME APP_PORT:$APP_PORT RESTART_OK" | tee -a $MAIL_TMP >> $HIS_LOG
echo "[$(date +%c)] main_chk(): $CHK_STATUS = $REAL_STATUS." >> $LOG0
echo "[$(date +%c)] main_chk(): Restart $APP_NAME success." >> $LOG0
else
# Fail to start application
NEED_MAIL=yes
CHK_RESULT="${APP_NAME}_port_${APP_PORT}_START_FAIL:${CHK_RESULT}"
echo "[$(date +%c)] APP_NAME:$APP_NAME APP_PORT:$APP_PORT START_FAIL" | tee -a $MAIL_TMP >> $HIS_LOG
echo "[$(date +%c)] main_chk(): $CHK_STATUS = $REAL_STATUS." >> $LOG0
echo "[$(date +%c)] main_chk(): Can not start $APP_NAME." >> $LOG0
fi
fi
fi
;;
*)
echo "[$(date +%c)] main_chk(): CHK_PORT = $CHK_PORT, CHK_PROC = $CHK_PROC." >> $LOG0
echo "[$(date +%c)] main_chk(): Not

berlong
- 粉丝: 0
- 资源: 1
最新资源
- 腾讯研究院 AI图景解码50关键词:快思考与慢思考
- 【css酷炫效果】纯CSS实现进度条加载动画
- 【css酷炫效果】纯CSS实现星空闪烁动画
- 成熟STM32直流电压电流采集与检测方案: PCB设计、KEIL源码、原理图及详细设计说明,完备STM32直流电压电流采集与检测解决方案:PCB、KEIL源码、原理图、设计说明,comsol燃料电池模
- 【css酷炫效果】纯CSS实现立体纸张折叠动效
- 基于springboot框架的校园组团活动平台的设计与实现(Java项目编程实战+完整源码+sql文件+学习练手好项目).zip
- 【css酷炫效果】纯CSS实现悬浮阴影扩散
- 成熟STM32直流电压电流采集与检测方案:包含PCB设计、KEIL源码及原理图与详细设计说明,成熟STM32直流电压电流采集与检测方案:含PCB设计、KEIL源码及原理图详解,迁移学习轴承诊断DSAN
- 【css酷炫效果】纯CSS实现气泡上升动画
- 采用springboot框架的基于JAVA的民族婚纱预定系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip
- 【css酷炫效果】纯css实现液体按钮效果
- 成熟STM32直流电压电流采集与检测方案:含PCB设计、KEIL源码及原理图详解,完备STM32直流电压电流采集与检测解决方案:PCB、KEIL源码、原理图、设计说明,基于svpwm的dtc异步电机滑
- STM32-FreeRTOS移植对比
- 【css酷炫效果】纯CSS实现按钮流光边框
- cuteftp 9下载即可使用
- 成熟STM32直流电压电流采集与检测方案:含PCB设计、KEIL源码及原理图、详细设计说明,成熟STM32直流电压电流采集与检测方案: PCB设计、KEIL源码、原理图及详细设计说明,半桥llc谐振变
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


