您的位置:首页 > 娱乐 > 八卦 > 建设局局长_广州app制作公司_软件开发公司联系方式_中国今天新闻最新消息

建设局局长_广州app制作公司_软件开发公司联系方式_中国今天新闻最新消息

2024/12/23 5:33:05 来源:https://blog.csdn.net/lcy1619260/article/details/142638807  浏览:    关键词:建设局局长_广州app制作公司_软件开发公司联系方式_中国今天新闻最新消息
建设局局长_广州app制作公司_软件开发公司联系方式_中国今天新闻最新消息

问题描述:公司项目太老了,还是tomcat项目,部署两台tomcat,做了nginx负载。最近发现每到上午10,下午3点,tomcat就宕机了,死活找不到原因,客户影响超期差,实在让人头疼。

解决思路:写个脚本检测tomcat是否宕机,如果宕机就重启,每2分钟执行一次。(注意:为什么不是一分钟,因为我们系统太大,一分钟重启不了)。再写另外一个脚本,每秒执行一次,检测tomcat是否宕机,如果宕机就通过nginx切换到另外一台上,而不影响用户使用。

上代码哈哈哈~~~~

检测tomcat宕机自动重启脚本如下:
分别是monitorTomcat8082.sh和monitorTomcat8085.sh,由于两个代码类似,提供一个就能说明问题了

#!/bin/sh# 获取tomcat进程ID  /usr/local/tomcat
TomcatID=$(ps -ef |grep tomcat8082 |grep -w 'tomcat8082'|grep -v 'grep'|awk '{print $2}')  # tomcat启动程序(这里注意tomcat实际安装的路径)  StartTomcat=/usr/local/web/tomcat8082/bin/startup.sh
ShutdownTomcat=/usr/local/web/tomcat8082/bin/shutdown.sh# 定义要监控的页面地址  WebUrl=http://localhost:8082# 日志输出TomcatMonitorLog=/usr/local/web/tomcat8082/logs/TomcatMonitor.logMonitor(){  echo "[info]开始监控tomcat...[$(date +'%F %H:%M:%S')]"  if [ $TomcatID ];then # 这里判断TOMCAT进程是否存在  echo "[info]当前tomcat进程ID为:$TomcatID,继续检测页面..."  # 检测是否启动成功(成功的话页面会返回状态"200")  TomcatServiceCode=$(curl -I -m 10 -o /dev/null -s -w %{http_code} $WebUrl)  if [ $TomcatServiceCode -eq 200 ];then  echo "[info]页面返回码为$TomcatServiceCode,tomcat启动成功,测试页面正常......"  else  echo "[error]tomcat页面出错,请注意......状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"  echo "[error]页面访问出错,开始重启tomcat"  $ShutdownTomcat  sleep 3  rm -rf /usr/local/web/tomcat8082/bin/CATALINA_PID$StartTomcat  fi  else  echo "[error]tomcat进程不存在!tomcat开始自动重启..."  echo "[info]$StartTomcat,请稍候......"  #rm -rf $TomcatCache  $StartTomcat  fi  echo "------------------------------"  }  Monitor>>$TomcatMonitorLog

以上代码以上是 获取tomcat的进程号,如果不存在就代表没启动,启动。如果存在,就访问页面试试,如果没响应代表宕机了,就重新启动。

检测tomcat宕机切换到备用tomcat脚本如下:

分别是monitorNginx8082.sh和monitorNginx8085.sh,由于两个代码类似,提供一个就能说明问题了

#!/bin/bashNginxID=$(cat /usr/local/nginx/conf/nginx.conf |  grep  'liuchongyang8082'| awk '{print $2}')# 定义要监控的页面地址  WebUrl=http://localhost:8082# 日志输出NginxMonitorLog=/usr/local/nginx/logs/NginxMonitorLog8082.logMonitor(){  echo "[info]开始监控tomcat8082...[$(date +'%F %H:%M:%S')]" # 检测是否启动成功(成功的话页面会返回状态"200")  TomcatServiceCode=$(curl -I -m 10 -o /dev/null -s -w %{http_code} $WebUrl)  if [ $TomcatServiceCode -eq 200 ];then  echo "[info]页面返回码为$TomcatServiceCode,tomcat8082启动成功,测试页面正常......"  else  if [ $NginxID = 'liuchongyang8085' ];thenecho "[error] 当前nginx配置文件已经是8085,无需切换!"elseecho "[error]tomcat8082页面出错,请注意......状态码为$TomcatServiceCode,错误日志已输出到$GetPageInfo"  echo "[error]页面访问出错,开始切换备用程序 8085" cp /usr/local/nginx/conf/nginx8085.conf /usr/local/nginx/conf/nginx.conf/usr/local/nginx/sbin/nginx -s reloadfifi  echo "------------------------------"  }  step=1 #间隔的秒数,不能大于60  
for (( i = 0; i < 60; i=(i+step) )); do  Monitor>>$NginxMonitorLogsleep $step  
done  
exit 0

以上代码以上是 访问页面试试,如果没响应代表宕机了,就切换到备用tomcat 。

至于 定时任务我使用的是centos自带的crontab服务。
第一个脚本每2分钟执行一次,第二个脚本每秒执行一次。
crontab只能每分钟执行一次,我是通过第二个脚本中用for循环和sleep做到的。

类似:

*/2 * * * *  sh  /usr/local/web/monitorTomcat8082.sh
*/2 * * * *  sh  /usr/local/web/monitorTomcat8085.sh*/1 * * * *   bash  /usr/local/web/monitorNginx8082.sh
*/1 * * * *   bash  /usr/local/web/monitorNginx8085.sh

在Tomcat宕机了,monitorTomcat.sh脚本去调用bin/startup.sh 命令的时候,出现以下的错误

Neither the JAVA_HOME nor the JRE_HOME environment variable is defined

At least one of these environment variable is needed to run this
program

解决办法 : 在tomcat、bin目录下的 setclasspath.sh 文件头部加上以下两个参数(目的就是指定其JDK环境)

export JAVA_HOME=/home/boss_indb/software/jdk1.8.0_152

export JRE_HOME=${JAVA_HOME}/jre

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com