脚本检测tomcat服务器启动,出现异常保存jvm 堆信息和log然后杀死原进程重启。
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
TOMCAT_PID=$(ps -ef|grep tomcat|grep -w 'tomcat'|grep -v 'grep'|awk '{print $2}')
START_TOMCAT=/usr/local/apache-tomcat-7.0.88/bin/startup.sh
MONITOR_URL=http://xxxx/index.html
TOMCAT_MONITOR_LOG=/usr/local/monitor/tomMonitor.log
TOMCAT_TAIL_LOG=/usr/local/monitor/tomTail$(date +%Y%m%d)_$(date +%H%M%S).log
TOMCAT_CATALINA_LOG=/usr/local/apache-tomcat-7.0.88/logs/catalina.out
DUMP_LOG=/usr/local/jvmlog/jvm$(date +%Y%m%d)_$(date +%H%M%S).hprof
Monitor()
{
echo "[$(date +'%F %H:%M:%S')]"
echo "[info]开始监控tomcat..."
if [[ $TOMCAT_PID ]];then
echo "[info]当前tomcat的PID为:$TOMCAT_PID,继续监测页面..."
HTTP_REPONSE_STATUS=$(curl -l -m 10 -o /dev/null -s -w %{http_code} $MONITOR_URL)
if [[ $HTTP_REPONSE_STATUS -eq 200 ]];then
echo "[info][$(date +'%F %H:%M:%S')]tomcat启动正常..."
elif [[ $HTTP_REPONSE_STATUS -eq 000 ]];then
echo "[error][$(date+'%F %H:%M:%S')]页面返回码为$HTTP_REPONSE_STATUS,链接tomcat超时..."
i=1
while [ $i -le 30 ] && [ $HTTP_REPONSE_STATUS -eq 000 ]
do
sleep 1
HTTP_REPONSE_STATUS=$(curl -l -m 10 -o /dev/null -s -w %{http_code} $MONITOR_URL)
if [[ $HTTP_REPONSE_STATUS -eq 200 ]];then
break
fi
let i++
echo "[error][$(date+'%F %H:%M:%S')]页面返回码为$HTTP_REPONSE_STATUS,链接tomcat超时...重试中...$i"
done
i=1
if [[ $HTTP_REPONSE_STATUS -eq 200 ]];then
echo "[info][$(date+'%F %H:%M:%S')]检测tomcat启动正常,退出循环。"
elif [[ $HTTP_REPONSE_STATUS -eq 000 ]];then
echo "[error][$(date+'%F %H:%M:%S')]页面返回码为$HTTP_REPONSE_STATUS,开始重启tomcat..."
/usr/local/java/bin/jmap -heap $TOMCAT_PID >> $TOMCAT_TAIL_LOG
tail -n 1000 $TOMCAT_CATALINA_LOG >> $TOMCAT_TAIL_LOG
/usr/local/java/bin/jmap -dump:format=b,file=$DUMP_LOG $TOMCAT_PID
sleep 10
kill -9 $TOMCAT_PID
/usr/sbin/ntpdate -u ntp.api.bz;/sbin/hwclock -w
sleep 8
$START_TOMCAT
fi
else
echo "[error][$(date+'%F %H:%M:%S')]页面返回码为$HTTP_REPONSE_STATUS,开始重启tomcat..."
/usr/local/java/bin/jmap -heap $TOMCAT_PID >> $TOMCAT_TAIL_LOG
tail -n 1000 $TOMCAT_CATALINA_LOG >> $TOMCAT_TAIL_LOG
/usr/local/java/bin/jmap -dump:format=b,file=$DUMP_LOG $TOMCAT_PID
sleep 10
kill -9 $TOMCAT_PID
/usr/sbin/ntpdate -u ntp.api.bz;/sbin/hwclock -w
sleep 8
$START_TOMCAT
fi
else
echo "[error][$(date+'%F %H:%M:%S')]tomcat进程不存在,开始启动..."
tail -n 1000 $TOMCAT_CATALINA_LOG >> $TOMCAT_TAIL_LOG
/usr/sbin/ntpdate -u ntp.api.bz;/sbin/hwclock -w
sleep 3
echo "[info][$(date+'%F %H:%M:%S')]$START_TOMCAT,..."
$START_TOMCAT
fi
echo "监测执行完成"
}
Monitor>>$TOMCAT_MONITOR_LOG