应用存活监控,服务挂掉自动重启,bat脚本

应用存活监控,自动重启,bat脚本

脚本简述:
使用bat脚本对应用的端口进行telnet监测,监测间隔10S,如果失败则自动找到应用启动路径进行重启

测试环境:

系统应用脚本类型
Windows Server 2016tomcatbat脚本

直接上脚本:

@echo off

rem 要检测的IP和端口
set server_ip="192.168.1.11"
set serverport="8080"
rem 日志位置
set logs_dir ="D:\进程守护日志"
call :check_port
rem tomcat 启动路径
set tomcat_start="D:\tomcat\startup.bat"
:check_port
rem 新窗口打开telnet,如果端口畅通会立即退出,脚本会在3秒后查看telnet窗口是否退出,如果没有退出表示端口不通!
echo [%date%%time%]:正在检测 %server_ip%%serverport% 端口... 
rem 打开一个telnet窗口
start /min cmd.exe /k "echo q|telnet -e 'q' %server_ip% %serverport%"
rem 等待4秒
ping -n 4 127.1>nul

tasklist /fi "windowtitle eq 管理员: Telnet %server_ip%" | find "cmd.exe" >nul && (
  echo [%date%%time%]:【失败】无法连通 %server_ip%:%serverport% >>%logs_dir%\%date:~0,4%%date:~5,2%%date:~8,2%.txt
  echo [%date%%time%]:【失败】无法连通 %server_ip%:%serverport%
  rem 关闭telnet失败的窗口
  taskkill /f /fi "windowtitle eq 管理员: Telnet %server_ip%" > NUL
  
  echo [%date%%time%]:关闭挂掉的服务窗口...
  taskkill /f /fi "windowtitle eq "测试环境" - call  %tomcat_start%" > NUL
  
  echo [%date%%time%]:准备重启服务...(在此期间检测脚本会等待10分钟,1分钟后删除jvm报错后生成的.mdmp文件,然后再等待9分钟继续检测服务是否正常运行)
  start "测试环境" /min cmd /k "call %tomcat_start%"
  ping 127.0.0.1 -n 60 > NUL
  echo [%date%%time%]:正在删除jvm报错后生成的.mdmp文件...
  del/f/q "*.mdmp"
  rem 等待10分钟
  ping 127.0.0.1 -n 520 > NUL
  
  echo [%date%%time%]:重启等待完毕,10秒后准备下一次检测,若10秒后日志未打印失败结果,则证明重启成功 >> %logs_dir%\%date:~0,4%%date:~5,2%%date:~8,2%.txt
 ) || (
  rem 关闭telnet成功的窗口
  taskkill /f /fi "windowtitle eq 管理员: Telnet" > NUL
  echo [%date%%time%]:【成功】可以连接到 %server_ip%:%serverport% >>%logs_dir%\%date:~0,4%%date:~5,2%%date:~8,2%.txt
  echo [%date%%time%]:【成功】可以连接到 %server_ip%:%serverport%
 )
ping 127.0.0.1 -n 10 > NUL
echo.
goto :check_port
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java中可以使用Java Management Extensions(JMX)来监控线程的运行状态。可以使用JMX来检查线程是否存活,以及是否在运行中。如果线程已经挂掉,可以使用Java程序来重新启动它。 以下是一个简单的示例程序,可以用来监控多个线程并自动重新启动挂掉的线程: ```java import java.lang.management.ManagementFactory; import java.lang.management.ThreadMXBean; public class ThreadMonitor { public static void main(String[] args) { ThreadMXBean threadMXBean = ManagementFactory.getThreadMXBean(); while (true) { long[] threadIds = threadMXBean.getAllThreadIds(); for (long threadId : threadIds) { Thread.State state = threadMXBean.getThreadInfo(threadId).getThreadState(); if (state == Thread.State.TERMINATED) { // 线程已经挂掉,重新启动它 Thread thread = new MyThread(); thread.start(); } } try { // 等待一段时间后再次检查线程状态 Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } class MyThread extends Thread { @Override public void run() { // 线程的业务逻辑 while (true) { System.out.println("Thread is running..."); try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } } ``` 在上面的程序中,我们使用了ThreadMXBean来获取所有线程的状态。如果发现有线程已经挂掉,就重新启动一个新的线程。程序会在每次检查线程状态后等待1秒钟再次检查,以避免过度消耗CPU资源。 需要注意的是,在实际生产环境中,我们需要更加完善的线程监控和管理机制来确保系统的稳定性和可靠性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值