前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >tomcat宕机自动重启和每日定时启动tomcat

tomcat宕机自动重启和每日定时启动tomcat

作者头像
全栈程序员站长
发布2022-09-15 10:34:25
1.7K0
发布2022-09-15 10:34:25
举报
文章被收录于专栏:全栈程序员必看

大家好,又见面了,我是你们的朋友全栈君。

在项目后期维护中会遇到这样的情况,tomcat在内存溢出的时候就出现死机的情况和遇到长时间不响应,需要人工手动关闭和重启服务,针对这样的突发情况,希望程序能自动处理问题而不需要人工关于,所以才有了目前的需求。

一、设置tomcat定时启动 1,首先将tomcat注册为服务,先打开tomcat的bin目录下service.bat文件,修改下面的值,这是sevvice的注册名称和显示名称,一般可使用默认值。 set SERVICE_NAME=Tomcat7 set PR_DISPLAYNAME=Apache Tomcat 【然后修改jvm大小,搜索到–JvmMs 128 –JvmMx 256 进行修改,因为做成服务启动,启动的时候就不会用到 catalina.bat,也就不会读取里面的jvm设置了。】(可选,可以不设置) 然后运行cmd命令窗口,cd 到tomcat的bin目录下,运行下面的命令 service.bat install 运行成功过后,会提示服务已经安装成功。 2,制作重启脚本restart.bat,文件内容如下 net stop Tomcat7 net start Tomcat7 3,利用控制面板里面的“任务计划”设置第2步的脚本运行时间计划 4,如果想删除服务,也很简单,先把服务停掉,然后在cmd窗口运行下面的命令即可,后面那个Tomcat7是服务名。 sc delete Tomcat7 需要注意的是,需要先把服务停掉,才能一次删除成功,或者删除之后再停止服务,就会发现服务已经删除成功了。 二、监听tomcat 只要运行start.bat即可,相关配置在config.properties文件中,默认即可, 如果服务名不对应就修改关闭和启动命令的服务名即可:net start 【Tomcat7】括号中服务名,然后运行start.bat 下面是具体的监听代码: 首先是监听类TomcatMonitor .Java[java] view plain copy

  1. import java.io.BufferedReader;
  2. import java.io.IOException;
  3. import java.io.InputStream;
  4. import java.io.InputStreamReader;
  5. import java.net.MalformedURLException;
  6. import java.net.URL;
  7. import java.net.URLConnection;
  8. import java.util.Properties;
  9. /**
  10. * @describe:TomcatMonitor.java
  11. *
  12. * @date 2016-7-4
  13. * @author liuweilong
  14. */
  15. public class TomcatMonitor implements Runnable{
  16. String start=“”; //系统命令 启动
  17. String stop=“”; //系统命令 关闭
  18. String testHttp=“”; //测试连接地址
  19. int testIntervalTime=1;//测试连接间隔时间,单位为秒
  20. int waitIntervalTime=2; //等待测试间隔时间,单位为秒
  21. int testTotalCount=5; //测试连接总次数
  22. Thread thread=null;
  23. public TomcatMonitor(){
  24. InputStream in = TomcatMonitor.class.getResourceAsStream(“config.properties”);
  25. Properties p = new Properties();
  26. try {
  27. p.load(in);
  28. stop=p.getProperty(“stop”);
  29. start=p.getProperty(“start”);
  30. testHttp=p.getProperty(“testHttp”);
  31. testIntervalTime=Integer.parseInt(p.getProperty(“testIntervalTime”));
  32. waitIntervalTime=Integer.parseInt(p.getProperty(“waitIntervalTime”));
  33. testTotalCount=Integer.parseInt(p.getProperty(“testTotalCount”));
  34. } catch (Exception e) {
  35. e.printStackTrace();
  36. }
  37. System.out.println(“*******************初始化成功!*******************”);
  38. thread=new Thread(this);
  39. thread.start();
  40. }
  41. public void run() {
  42. System.out.println(“正在监控中…”);
  43. int testCount=0;
  44. while(true){
  45. testCount=0;
  46. testCount++;
  47. boolean isrun=test();
  48. System.out.println(“正在启动测试连接,尝试连接次数为:”+testCount+“,结果为:”+(isrun==false?“失败.”:“成功!”));
  49. while(!isrun){
  50. if(testCount>=testTotalCount)break;
  51. try {
  52. thread.sleep(testIntervalTime*1000);
  53. } catch (InterruptedException e) {
  54. e.printStackTrace();
  55. }
  56. testCount++;
  57. System.out.println(“正在启动测试连接,尝试连接次数为:”+testCount+“,结果为:”+(isrun==false?“失败.”:“成功!”));
  58. isrun=test();
  59. }
  60. if(!isrun){
  61. try{
  62. //关闭tomcat服务
  63. Process proc = Runtime.getRuntime().exec(stop);
  64. thread.sleep(5000);
  65. //启动tomcat服务
  66. System.out.println(“测试连接失败,正在重启tomcat”);
  67. Process p=Runtime.getRuntime().exec(start);
  68. System.out.println(“重启tomcat成功”);
  69. }catch(Exception e){
  70. e.printStackTrace();
  71. System.out.println(“重启tomcat异常,请查看先关错误信息。。。。。”);
  72. }
  73. }
  74. try {
  75. thread.sleep(waitIntervalTime*1000);
  76. } catch (InterruptedException e) {
  77. e.printStackTrace();
  78. }
  79. isrun=test();
  80. }
  81. }
  82. public boolean test(){
  83. URL url=null;
  84. try {
  85. url = new URL(testHttp);
  86. } catch (MalformedURLException e) {
  87. e.printStackTrace();
  88. }
  89. try {
  90. URLConnection urlConn=url.openConnection();
  91. urlConn.setReadTimeout(15000);
  92. BufferedReader reader = new BufferedReader(new InputStreamReader( urlConn.getInputStream())); //实例化输入流,并获取网页代码
  93. String s;
  94. while ((s = reader.readLine()) != null) {
  95. return true;
  96. }
  97. } catch (Exception e) {
  98. return false;
  99. }
  100. return false;
  101. }
  102. public static void main(String[] args) throws Exception{
  103. TomcatMonitor tm=new TomcatMonitor();
  104. }
  105. }

然后是对应的配置文件config.properties: [plain] view plain copy

  1. #系统命令 启动
  2. start=net start Tomcat7
  3. #关闭
  4. stop = net stop Tomcat7
  5. #测试连接总次数
  6. testTotalCount=3
  7. #连接失败时,再次检测时间间隔,单位为秒
  8. testIntervalTime=3
  9. #连接超时时间,即多少秒tomcat没响应视为宕机,单位为秒
  10. connectionTimeout=15
  11. #tomcat启动时间,防止在tomcat尚未启动完成的时候,程序又去检验tomcat状态,造成尚未启动完成又重新启动,单位为秒
  12. tomcatStartTime=600
  13. #测试连接地址
  14. testHttp=http://127.0.0.1:8080
  15. #正常情况下,每次检测间隔时间,单位为秒
  16. waitIntervalTime=30

最后是启动的start.bat: [plain] view plain copy

  1. java -cp . TomcatMonitor

如何监控tomcat死掉后自动重启 安装设置分为以下四个步骤:第一:创建监控页面在项目系统里添加一个提供监控系统访问的页面monitor.jsp,只需输出一句代码,代码如下:<%String s=”ok”;out.println(s.length());%>第二:修改tomcat配置若是系统自动安装的服务,可直接跳过这一步。但是需确定服务名称,以便在以后的步骤使用,如下图:

tomcat宕机自动重启和每日定时启动tomcat
tomcat宕机自动重启和每日定时启动tomcat

若是手动为tomcat设置服务,请按以下步骤进行: 1、进入tomcat目录下的bin目录,用记事本打开service.bat文件,找到set SERVICE_NAME=TOMCATXX这一句,把后面的值改成自己对tomcat设置的服务名,把PR_DISPLAYNAME的值设置为显示的服务名称,这个是在系统管理的服务里面中列表里显示的名字。 如设置信访系统,则设置为这样: Set SERVICE_NAME=xfgl Set PR_DISPLAYNAME=tomcat xfgl 保存。 2、在运行里输入“CMD”,进入命令控制台,使用cd命令转到tomcat目录下的bin目录,运行service.bat install命令,把tomcat设置为系统启动服务。 3、进入控制面板->管理工具->服务,在服务列表中找到“tomcat xfgl”一项,双击弹出窗口,把启动类型改为“自动”,确定保存。 设置监控脚本文件

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/163646.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档