windows下tomcat无故宕机,检测http或https服务,并自动重启Tomcat服务


一、问题描述及解决原理

把项目发布到windows服务器中,如tomcat工程不稳定,会有无故宕机的问题。如果通过程序无法解决,并且重启tomcat服务能够生效的话,可以做一个自动检测并重启的脚本。
脚本通过检测tomcat对应的工程链接(http或者https)是否已经正常启动,如果未正常启动,则重启tomcat服务。

二、安装curl环境

1、curl介绍

curl(全称Client URL):用于在命令行下运行的网络工具,用于与服务器进行通信。它支持多种协议,支持DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, Telnet and TFTP。 curl 支持SSL证书, HTTP POST, HTTP PUT, FTP上传, 基于HTTP表单的上传, 代理, HTTP/2, cookies, 用户+密码认证 (Basic, Plain, Digest, CRAM-MD5, NTLM, Negotiate and Kerberos), 文件传输修复, 隧道代理等等。

2、官网网站:https://curl.se/download.html

3、配置步骤

(1)下翻找到windwos版本,点击最新对应版本下载,我下载的是64位的

在这里插入图片描述

(2)点击进入后,下载对应架构的包。(比如我的是x86,就下载第一个)

在这里插入图片描述

(3)解压下载的压缩包,并将解压后的放在某个目录下

test

(4)添加环境变量

将curl目录下的bin添加到环境变量中
在这里插入图片描述

(5)打开命令行窗口验证,如下即成功。(命令行要打开一个新的)

etst

三、bat脚本

@echo off
setlocal enabledelayedexpansionrem 链接
set URL="http://localhost:8080"
rem tomcat目录
set TOMCAT_HOME="E:\HMMJabTY\Tomcat8"
rem 关闭tomcat命令的路径
set CLOSE_CMD=%TOMCAT_HOME%\bin\shutdown.bat
rem 启动tomcat命令的路径
set START_CMD=%TOMCAT_HOME%\bin\start.bat
rem tomcat缓存目录
set TOMCAT_CACHE=%TOMCAT_HOME%\work
rem 日志文件的路径
set LOG_PATH=%TOMCAT_HOME%\check.log
rem 每次检测完后等待时间,再进行下一次检测,秒,若将程序部署到系统计划任务,可忽略
set TIME_WAIT=5:loop
set httpcode=0
cd /d %TOMCAT_HOME%
echo %date% %time%
echo 'begin checking tomcat'echo %date% %time% >>%LOG_PATH%
for /l %%i in (1,1,3) do (echo %%ifor /f "delims=" %%r in ('curl -sL -w "%%{http_code}" %URL% -o /dev/null') do (set httpcode=%%rif !httpcode!==200 (GOTO :OUTFOR))
):OUTFOR
echo %httpcode% >>%LOG_PATH%if not %httpcode%==200 (echo close tomcat >>%LOG_PATH%call %CLOSE_CMD%timeout -t 5 >nulecho success to close tomcat >>%LOG_PATH%rd /S /Q %TOMCAT_CACHE%echo start tomcat >>%LOG_PATH%call %START_CMD%echo success to start tomcatecho success to start tomcat >>%LOG_PATH%
) else (echo the tomcat run is okecho the tomcat run is ok >>%LOG_PATH%
)
timeout -t 3 >nul
rem 若将脚本程序部署到系统计划程序中,将以下代码可注释
timeout -t %TIME_WAIT% >nul
goto loop

四、扩展:脚本解析

脚本逻辑:该脚本会自动检测tomcat启动成功后的一个地址,(就是你tomcat启动成功后能访问的一个地址,你可以写一个测试地址,比如我这里是http://localhost:8080/),如果访问不到就会自动启动tomcat的start.bat文件

@echo off
# 在此语句后所有运行的命令都不显示命令行本身,但是本身的指令是会显示出来的setlocal enabledelayedexpansion
# 先了解一下批处理运行命令的机制:批处理读取命令时是按行读取的(另外例如for命令等,其后用一对圆括号闭合的所有语句也当作一行),在处理之前要完成必要的预处理工作,这其中就包括对该行命令中的变量赋值。
# 此语句含义:本地延迟扩展。延迟变量,全程延迟环境变量扩展。即不是先给该行变量赋值,而是在运行过程中给变量赋值。rem 链接
# rem在bat脚本中为注释,执行脚本时会忽略此语句set URL="https://localhost:8080"
# set指令用来设置变量rem tomcat目录
set TOMCAT_HOME="E:\HMMJabTY\Tomcat8"
rem 关闭tomcat命令的路径
set CLOSE_CMD=%TOMCAT_HOME%\bin\shutdown.bat
rem 启动tomcat命令的路径
set START_CMD=%TOMCAT_HOME%\bin\start.bat
rem tomcat缓存目录
set TOMCAT_CACHE=%TOMCAT_HOME%\work
rem 日志文件的路径
set LOG_PATH=%TOMCAT_HOME%\check.log
rem 每次检测完后等待时间,再进行下一次检测,秒,若将程序部署到系统计划任务,可忽略
set TIME_WAIT=5:loop
# 在Bat中有标签一词,跟C语言的函数类似。并且标签必须单独一行,并且以冒号开头。set httpcode=0
cd /d %TOMCAT_HOME%
echo %date% %time%
echo 'begin checking tomcat'echo %date% %time% >>%LOG_PATH%
# >>追加内容到文件末尾,而不会清除原有的内容主要将本来显示在屏幕上的内容输出到指定文件中指定文件如果不存在,则自动生成该文件# 循环指令。这里需要了解两个关键字%i、%%i。%i这个关键字不能在bat中使用。只能再CMD命令下的for中使用,%%i是在bat的for中使用的指令。
# 规则:for、in和do是for语句的关键字,它们三个缺一不可。
# /l:表示以增量形式从开始到结束的一个数字序列
# (1,1,3):跟参数/l配合使用时,表示从1开始,以1递增,直到3。这就是循环3次。
# /f:主要用来处理文件和一些命令的输出结果。它可以提取文本文件的内容,进行逐行分析和处理
# delims=符号列表:切分字符串。没有指定符号则for /f语句以空格键或跳格键作为分隔符;如果制定了如“delims=,.”,则以逗号和句号作为被处理的字符串的分隔符号。# curl:
# -s: 静默模式,在命令行中不会输出无关中间过程信息
# -L:自动重定向,有的网址是自动跳转的。使用-L参数,curl就会跳转到新的网址。
# -k:在发送https请求时,加上-k参数,否则会有如下证书的报错。如果是http请求,可以不加。
# -o:将返回内容输出到文件中。其中nul相当于linux中的/dev/null。功能就是一种特殊的虚拟设备,用于写入而不是读取。写入/dev/null的任何内容都会从操作系统中消失。
# -w:操作完成后在返回信息尾部追加指定的内容。完成请求传输后,使 curl 在 stdout 上显示自定义信息。%%{http_code}为返回的状态码。(状态码文档末尾有各种码值的解释)for /l %%i in (1,1,3) do (echo %%ifor /f "delims=" %%r in ('curl -sL -k %URL% -o nul -w "%%{http_code}"' ) do (set httpcode=%%rif !httpcode!==200 (GOTO :OUTFOR))
):OUTFOR
echo %httpcode% >>%LOG_PATH%# call:使用call命令,可以调用其它程序(包括批处理文件、其它执行命令)或标签。
# timeout -t 5:延时5s操作。>nul作用为屏幕不提示if not %httpcode%==200 (echo close tomcat >>%LOG_PATH%call %CLOSE_CMD%timeout -t 5 >nulecho success to close tomcat >>%LOG_PATH%# /S:表示除目录本身外,还将删除指定目录下的所有子目录和文件。用于删除目录树。
# /Q:安静模式,带/S 删除目录树时不要求确认。rd /S /Q %TOMCAT_CACHE%echo start tomcat >>%LOG_PATH%call %START_CMD%echo success to start tomcatecho success to start tomcat >>%LOG_PATH%
) else (echo the tomcat run is okecho the tomcat run is ok >>%LOG_PATH%
)
timeout -t 3 >nul
rem 若将脚本程序部署到系统计划程序中,将以下代码可注释
timeout -t %TIME_WAIT% >nul
goto loop

使用tomcat8w启动

上述脚本是让tomcat使用cmd窗口启动,如果想用tomcat8w启动,如下图,则将脚本做微调可实现。
在这里插入图片描述

(1)编写restart.bat脚本

新建一个文件restart.bat,将以下脚本放在里边,并放到tomcat/bin目录下。

@echo off
net start tomcat8w

(2)修改START_CMD参数

将上述的启动tomcat命令的路径,start_cmd改为restart.bat


附:

状态码介绍:

curl爬取过程中,会返回一个http_code,下面是他们的意义信息
$http_code[“0”]=“Unable to access”;
$http_code[“100”]=“Continue”;
$http_code[“101”]=“Switching Protocols”;
$http_code[“200”]=”OK”;
$http_code[“201”]=”Created”;
$http_code[“202”]=”Accepted”;
$http_code[“203”]=”Non-Authoritative Information”;
$http_code[“204”]=”No Content”;
$http_code[“205”]=”Reset Content”;
$http_code[“206”]=”Partial Content”;
$http_code[“300”]=”Multiple Choices”;
$http_code[“301”]=”Moved Permanently”;
$http_code[“302”]=”Found”;
$http_code[“303”]=”See Other”;
$http_code[“304”]=”Not Modified”;
$http_code[“305”]=”Use Proxy”;
$http_code[“306”]=”(Unused)”;
$http_code[“307”]=”Temporary Redirect”;
$http_code[“400”]=”Bad Request”;
$http_code[“401”]=”Unauthorized”;
$http_code[“402”]=”Payment Required”;
$http_code[“403”]=”Forbidden”;
$http_code[“404”]=”Not Found”;
$http_code[“405”]=”Method Not Allowed”;
$http_code[“406”]=”Not Acceptable”;
$http_code[“407”]=”Proxy Authentication Required”;
$http_code[“408”]=”Request Timeout”;
$http_code[“409”]=”Conflict”;
$http_code[“410”]=”Gone”;
$http_code[“411”]=”Length Required”;
$http_code[“412”]=”Precondition Failed”;
$http_code[“413”]=”Request Entity Too Large”;
$http_code[“414”]=”Request-URI Too Long”;
$http_code[“415”]=”Unsupported Media Type”;
$http_code[“416”]=”Requested Range Not Satisfiable”;
$http_code[“417”]=”Expectation Failed”;
$http_code[“500”]=”Internal Server Error”;
$http_code[“501”]=”Not Implemented”;
$http_code[“502”]=”Bad Gateway”;
$http_code[“503”]=”Service Unavailable”;
$http_code[“504”]=”Gateway Timeout”;
$http_code[“505”]=”HTTP Version Not Supported”;

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/16960.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

不同对象的集合转换

https://blog.csdn.net/qq_42483473/article/details/128984514 import com.alibaba.fastjson.JSON;import java.util.ArrayList; import java.util.List;/*** author */ public class ObjectConversion {/*** 从List<A> copy到List<B>* param list List<B>…

Hexo+GithubPages免费搭建个人博客网站

HexoGithubPages免费搭建个人博客网站 目录 一、前言二、Github配置 新建同名仓库配置Pages 三、安装Hexo四、配置hexo-deployer-git五、访问六、发布文章七、安装主题 一、前言 我之前开了好几年的云服务器了&#xff0c;实际上使用场景并不是很多&#xff0c;感觉有点浪费…

Ubuntu 离线部署的常见操作

Ubuntu 离线安装的常见操作 **说明&#xff1a;**很多情况下,生产环境都是离线环境&#xff0c;然而开发环境都是互联网的环境&#xff0c;因此部署的过程中需要构建离线安装包; 1. 下载但是不安装 # 例如使用 apt 下载 wireshark 安装包 sudo apt download wireshark # 下载…

【数据结构】无头+单向+非循环链表(SList)(增、删、查、改)详解

一、链表的概念及结构 1、链表的概念 之前学习的顺序表是用一段物理地址连续的存储单元依次存储数据元素的线性结构&#xff0c;而链表是一种物理存储结构上非连续、非顺序的存储结构&#xff0c;数据元素的逻辑顺序是通过链表中的指针链接次序实现的&#xff0c;可以实现更加…

下载离线版的VS Visual Studio 并下载指定的版本

一、先下载引导程序 下载地址VS VisualStudio官网 在这个页面翻到最下面 在这里下载需要的版本 下载引导程序 二、下载离线安装包 写一个批处理文件&#xff08;vs.bat&#xff09; 命令格式如下 <vs引导程序exe> --layout <离线安装包下载的路径> --add <功能…

1、Tomcat

java介绍 Java语言和平台由以下几个主要部分组成&#xff1a; 1、Java编程语言(Java Language)&#xff1a;这是Java的核心部分&#xff0c;包括Java语法、关键字、数据类型、运算符、控制结构等。程序员使用Java语言来编写应用程序的源代码。 2、Java开发工具包(Java Developm…

Rpc服务消费者(Rpc服务调用者)实现思路

Rpc服务消费者&#xff08;Rpc服务调用者&#xff09;实现思路 前面几节说到Rpc消费者主要通过UserServiceRPc_Stub这个protobuf帮我们生成的类来实现&#xff0c;上代码回顾一下 class UserServiceRpc_Stub : public UserServiceRpc {public:UserServiceRpc_Stub(::PROTOBUF…

langchain-ChatGLM源码阅读:webui.py

样式定制 使用gradio设置页面的视觉组件和交互逻辑 import gradio as gr import shutilfrom chains.local_doc_qa import LocalDocQA from configs.model_config import * import nltk import models.shared as shared from models.loader.args import parser from models.load…

Android Layout大点兵

原文链接 Android Layout大点兵 智能手机催生了移动互联时代&#xff0c;现如今移动应用越来越成为最为核心的终端。而GUI页面是移动互联终端的标配&#xff0c;做好一个GUI页面&#xff0c;是非常重要的&#xff0c;能极大的提升用户体验和用户满意度。安桌生态&#xff0c;自…

【转】ECC加密算法简介

原文链接&#xff1a;https://blog.csdn.net/xuanli4845/article/details/115907886 ECC全称为“Ellipse Curve Ctyptography”&#xff0c;是一种基于椭圆曲线数学的公开密钥加密算法。椭圆曲线在密码学中的使用是在1985年由Neal Koblitz和Victor Miller分别独立提出的。 与…

kotlin 编写一个简单的天气预报app(五)增加forcast接口并显示

参考资料 OpenWeatherMap提供了一个/forecast接口&#xff0c;用于获取未来几天的天气预报。你可以使用HTTP GET请求访问该接口&#xff0c;并根据你所在的城市或地理坐标获取相应的天气数据。 以下是一个示例请求的URL和一些常用的参数&#xff1a; URL: http://api.openwe…

Flink(二十二)Flink 的table api与sql之创建表的DDL

Flink 系列文章 Flink&#xff08;一&#xff09;1.12.7或1.13.5详细介绍及本地安装部署、验证 Flink&#xff08;二&#xff09;1.13.5二种部署方式(Standalone、Standalone HA )、四种提交任务方式&#xff08;前两种及session和per-job&#xff09;验证详细步骤 Flink&…

K8s安全配置:CIS基准与kube-bench工具

01、概述 K8s集群往往会因为配置不当导致存在入侵风险&#xff0c;如K8S组件的未授权访问、容器逃逸和横向攻击等。为了保护K8s集群的安全&#xff0c;我们必须仔细检查安全配置。 CIS Kubernetes基准提供了集群安全配置的最佳实践&#xff0c;主要聚焦在两个方面&#xff1a;主…

Greeplum以每日一个区间,批量创建多个分区

目录 一、需求分析 二、实施流程 2.1、创建以日期分区的临时表 2.2、循环创建每日的分区 2.3、单语句新增分区 2.4、删除特定分区 三、其他 一、需求分析 如标题所示&#xff0c;现在需要建一张临时表来存储每日增量的流水数据。存储周期为近两年&#xff0c;其中日增量约10…

【解析】对比学习和孪生网络的关系

文章目录 区别联系具体概念孪生网络&#xff08;Siamese Networks&#xff09;对比学习&#xff08;Contrastive Learning&#xff09; 总结 区别 孪生网络是一种特定的神经网络结构&#xff1b;对比学习是一种学习策略&#xff0c;它试图让模型学习如何区分正样本对&#xff…

C语言指针进阶-2

本篇文章带 1. 数组传参和指针传参 2. 函数指针 3. 函数指针数组 的相关知识详细讲解&#xff01; 如果您觉得文章不错&#xff0c;期待你的一键三连哦&#xff0c;你的鼓励是我创作动力的源泉&#xff0c;让我们一起加油&#xff0c;一起奔跑&#xff0c;让我们顶峰相见&…

(文章复现)梯级水光互补系统最大化可消纳电量期望短期优化调度模型matlab代码

参考文献&#xff1a; [1]罗彬,陈永灿,刘昭伟等.梯级水光互补系统最大化可消纳电量期望短期优化调度模型[J].电力系统自动化,2023,47(10):66-75. 1.基本原理 1.1 目标函数 考虑光伏出力的不确定性&#xff0c;以梯级水光互补系统的可消纳电量期望最大为目标&#xff0c;函数…

kernel32.dll如何修复,快速解决kernel32.dll缺失的方法

Kernel32.dll是Windows操作系统中一个重要的系统文件&#xff0c;对于系统的正常运行至关重要。然而&#xff0c;由于各种原因&#xff0c;用户可能会遇到kernel32.dll文件的缺失问题。今天小编就来给大家详细的介绍一下kernel32.dll这个文件&#xff0c;并且详细的介绍一下ker…

Mybatis映射关系mybatis核心配置文件

目录 1.Mybatis映射关系 1.1一对一映射之resultType 1.2resultMap处理映射关系 2.mybatis核心配置文件 1. properties&#xff08;属性&#xff09; 2. settings&#xff08;设置&#xff09; 3.typeAliases&#xff08;类型别名&#xff09; 4.environments&#xff0…

Iptables

常用名词 容器&#xff1a;存放东西 表(table)&#xff1a;存放链的容器&#xff0c;防火墙的最大概念 链(chain)&#xff1a;存放规则的容器 规则(policy)&#xff1a;准许或拒绝规则 Iptables处理流程 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上…