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.rhkb.cn/news/75342.html

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

相关文章

Flask学习笔记_异步论坛(四)

Flask学习笔记_异步论坛(四) 1.配置和数据库链接1.exts.py里面实例化sqlalchemy数据库2.config.py配置app和数据库信息3.app.py导入exts和config并初始化到app上 2.创建用户模型并映射到数据库1.models/auth.py创建用户模型2.app.py导入模型并用flask-mi…

RabbitMQ 教程 | 第4章 RabbitMQ 进阶

👨🏻‍💻 热爱摄影的程序员 👨🏻‍🎨 喜欢编码的设计师 🧕🏻 擅长设计的剪辑师 🧑🏻‍🏫 一位高冷无情的编码爱好者 大家好,我是 DevO…

HCIA云计算 V5.0题库

云计算,这是近几年听得最多词了,云计算对于网络的发展帮助非常大,它自身所产生的价值是不可估量的!所以云计算的岗位对于很多IT公司来说,都是有一定地位的。华为认证云计算面向的对象很简单就是对云计算技术感兴趣的人…

【Spring】(四)Bean 的作用域和生命周期

文章目录 前言一、Bean 的作用域1.1 被修改的 Bean 案例1.2 作用域的定义1.3 Bean 的六种作用域1.4 Bean 作用域的设置 二、Spring 的执行流程 和 Bean 的生命周期2.1 Spring 的执行流程2.2 Bean 的生命周期2.3 Bean 生命周期的演示 前言 Bean 是 Spring 框架中的一个核心概念…

iphone内存不足导致白苹果?可以使用这2种办法解决!

因为iPhone内存不足没及时清理导致打开任何软件闪退,这时很多小伙伴会重启手机来解决闪退问题,但就会出现白苹果问题,无法正常进入手机系统、实现任何操作的一种状态。 内存不足导致iPhone白苹果的问题很常见,可以说是苹果最常见…

排序进行曲-v4.0

文章目录 小程一言快速排序步骤详细解释具体步骤 举例总结 复杂度分析时间复杂度分析:空间复杂度分析:注意 应用场景总结 实际举例结果总结 代码实现结果解释 小程一言 这篇文章是在排序进行曲3.0之后的续讲, 这篇文章主要是对快速排序进行细…

nodejs中的path.json和path.resolve的区别

nodejs中的path.json和path.resolve的区别 我们有多少次在 Node.js 项目中遇到过path.join()和path.resolve()却没有真正理解它们之间的区别?本文就讲解一下这两者的区别。 重要术语 首先我们先来看看几个术语,便于后续我们掌握这两者的差异。 字符串…

libcurl开源的、跨平台的网络传输库,用于在程序中实现数据传输功能的编译

文章目录 前言1、libcurl关键特点和功能2、没有使用openssl以及libssh2编译libcurl的文件和使用openssl和libssh2编译3、libcurl网络库的下载4、libcurl网络库的编译4.1、直接使用cmake编译,不使用 OpenSSL 和 libssh2库编译的出来的libcurl库4.2、使用 OpenSSL 和 …

peerDependency到底是什么

peerDependency到底是什么 正常开发中,我们经常接触到的是 package.json 中的 dependencies 和 devDependencies, 本文不对上面两个进行细节分析,让我们来看看 peerDependencies 是什么? 在 NPM v7 中,默认安装 peerDependencies…

虹科案例|如何分析设备故障时间和次数,打破生产瓶颈?

虹科设备绩效管理系统 保障生产设备的稳定性和可靠性 生产设备的稳定性和可靠性是保证企业正常生产的重要条件之一,设备故障的频发严重影响企业的正常生产,那么如何分析设备故障时间和次数,查找设备故障原因,协助企业打破生产瓶…

Arthas协助MQ消费性能优化

背景 项目中使用AWS的SQS消息队列进行异步处理,QA通过压测发现单机TPS在23左右,目标性能在500TPS,所以需要对消费逻辑进行优化,提升消费速度。 目标 消费TPS从23提升到500 优化流程 优化的思路是先分析定位性能瓶颈&#xff…

SpringBoot使用redis作为缓存的实例

目录 什么是缓存? 缓存的作用? 缓存的成本? 实际项目中的应用 代码展示 什么是缓存? 缓存就是数据交换的缓冲区(称作Cache [ kʃ ] ),是存贮数据的临时地方,一般读写性能较高。 缓…

[数据集][目标检测]遛狗不牵绳数据集VOC格式-1980张

数据集格式:Pascal VOC格式(不包含分割路径的txt文件和yolo格式的txt文件,仅仅包含jpg图片和对应的xml) 图片数量(jpg文件个数):1980 标注数量(xml文件个数):1980 标注类别数:5 标注类别名称:["dog","p…

C# Blazor 学习笔记(0):初识Blazor

文章目录 Blazor是什么适合人群 开始学习BlazorBlazor资源如何创建BlazorBlazor 基础知识介绍文件分布Razor和cshtml的区别Razor介绍 Blazor是什么 Blazor是微软推出的前端框架,有两种形式,以下以Blazor Server为主。具有一下特点 前端是用C#而不是JS前…

STM32使用HAL库中外设初始化MSP回调机制及中断回调机制详解

STM32使用HAL库之Msp回调函数 1.问题提出 在STM32的HAL库使用中,会发现库函数大都被设计成了一对: HAL_PPP/PPPP_Init HAL_PPP/PPPP_MspInit 而且HAL_PPP/PPPP_MspInit函数的defination前面还会有__weak关键字 上面的PPP/PPPP代表常见外设的名称为…

模板方法设计模式(C++)

定义 定义一个操作中的算法的骨架(稳定),而将一些步骤延迟(变化)到子类中。Template Method使得子类可以不改变(复用)一个算法的结构即可重定义(override重写)该算法的某些特定步骤。 ——《设计模式》GoF Template Method模式是一种非常基…

元素2D转3D 椭圆形旋转实现

椭圆旋转功能展示 transform-style: preserve-3d;(主要css代码) gif示例(背景图可插入透明以此实现边框线的旋转) 导致的无法点击遮挡问题可以参考我的另一个文章 穿透属性-----------------------css穿透属性 实时代码展示

Unity之webgl端通过vue3接入腾讯云联络中心SDK

腾讯云联络中心SDK:云联络中心 Web-SDK 开发指南-文档中心-腾讯云 (tencent.com) 1 首先下载Demo ​ 1.1 对其进行解压 ​ 1.2根据文档操作 查看README.md,根据说明设置server下的dev.js里的相关参数。 然后打开电脑终端,cd到项目的路径: ​ 安装…

kafka权威指南(阅读摘录)

零复制 Kafka 使用零复制技术向客户端发送消息——也就是说,Kafka 直接把消息从文件(或者更确切地说是 Linux 文件系统缓存)里发送到网络通道,而不需要经过任何中间缓冲区。这是 Kafka 与其他大部分数据库系统不一样的地方&#…

单元测试之 - Review一个微服务的单元测试

这里以github上一个microservice的demo代码为例,来看看如何为一个完整的服务编写单元测试。具体代码如下所示,我们重点查看一下catalog和customer,order中的单元测试有哪些。 首先来看catalog服务的单元测试,这个服务下面主要编写了CatalogWe…