#!/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
最新资源
- 大创项目_2.zip
- 大创项目_22.zip
- 大创项目_21.zip
- 大创项目_14.zip
- 大创项目_15.zip
- 大创项目_18.zip
- 大创项目_16.zip
- 大创项目_13.zip
- 施耐德ATV312变频器触摸屏双机通讯与功能控制说明(跳过PLC,实现低成本高效率监控),mcgs RTU通讯实现施耐德ATV312变频器双机监控与操作示例-无PLC,功能丰富且成本优化,多通道卷积
- 采用springboot框架的基于Java web的药店管理系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip
- iniparse_demo.rar
- 施耐德ATV312变频器通过MCGS RTU通讯实现双机监控与控制的触摸屏集成解决方案,施耐德ATV312变频器通过MCGS RTU通讯实现双机监控与控制的触摸屏集成解决方案,基于角度和距离信息,采用
- Qt QML 解决SVG图片显示模糊的问题
- 基于springboot框架的入校申报审批系统的设计与实现(Java项目编程实战+完整源码+毕设文档+sql文件+学习练手好项目).zip
- mcgs RTU通讯实现施耐德ATV312变频器双机监控与操作示例-无PLC,功能丰富且成本优化,施耐德变频器与触摸屏实现直接通讯监控实践示例-两变频器双效控制与状态实时监控(不使用PLC的节约方
- 施耐德ATV312变频器通过MCGS RTU通讯实现双机监控与控制的触摸屏集成解决方案,无PLC的施耐德ATV312变频器通讯示例:触摸屏控制监控两台变频器,功能多且省成本,改进型可调整步长 P&O
资源上传下载、课程学习等过程中有任何疑问或建议,欢迎提出宝贵意见哦~我们会及时处理!
点击此处反馈


