2021-01-04

1 篇文章 0 订阅
1 篇文章 0 订阅

脚本检测tomcat服务器启动,出现异常保存jvm 堆信息和log然后杀死原进程重启。

#!/bin/sh
export JAVA_HOME=/usr/local/java
export JRE_HOME=/usr/local/java/jre
# 获取tomcat的PID
TOMCAT_PID=$(ps -ef|grep tomcat|grep -w 'tomcat'|grep -v 'grep'|awk '{print $2}')
# tomcat的启动文件位置
START_TOMCAT=/usr/local/apache-tomcat-7.0.88/bin/startup.sh
# 需要监测的一个GET请求地址
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()
{
  # 输出时间,注意date后有个空格
  echo "[$(date +'%F %H:%M:%S')]"
  echo "[info]开始监控tomcat..."
  # 判断tomcat的PID是否存在,如不存在说明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)
    # 如果响应码为200证明tomcat在正常启用
    if [[ $HTTP_REPONSE_STATUS -eq 200 ]];then
      echo "[info][$(date +'%F %H:%M:%S')]tomcat启动正常..."

	#一般情况下遇到000,默认考虑为200,此处加入循环判断循环30次,30次都返回000则杀掉进程保存map和log重启
    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
		# 获取dump日志
		/usr/local/java/bin/jmap -dump:format=b,file=$DUMP_LOG  $TOMCAT_PID
		sleep 10
		# 结束tomcat进程
		kill -9 $TOMCAT_PID
		# 矫正系统时间
		/usr/sbin/ntpdate -u ntp.api.bz;/sbin/hwclock -w
		# 8秒后重启tomcat
		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
      # 获取dump日志
      /usr/local/java/bin/jmap -dump:format=b,file=$DUMP_LOG  $TOMCAT_PID
      sleep 10
      # 结束tomcat进程
      kill -9 $TOMCAT_PID
      /usr/sbin/ntpdate -u ntp.api.bz;/sbin/hwclock -w
      # 8秒后重启tomcat
      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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值