windows环境中使用windows批处理(BAT)与计划任务进行JAVA应用定时重启

 项目中遇到以下需求:

1.服务器为windows环境

2.运行JAVA应用,JDK1.6版本

3.应用偶发通讯连接失败问题,但是应用已停止维护,仅需要简单定时重启或未启动时主动启动此应用功能

4.公司内监控软件无法使用(要求JDK1.8)

考虑使用windows下批处理脚本进行此功能开发,最终功能为:在此应用未运行时,运行此BAT批处理文件可以运行此应用;利用windows计划任务功能(此文不赘述,请百度相关文章)定时运行此脚本,检测到此应用运行时,关闭此应用并重新运行(即重启应用)

BAT文件中使用JPS -LL命令来查询出所有运行的JVM应用及对应的PID进程号,筛选出符合key的应用名进行启动、重启

详见代码及注释

@echo off
setlocal enabledelayedexpansion
set "key=ssmq.server"
set "cnt=1"
set "appPath=D:\test folder"
set "appBat=RUN.bat"
set line=
set pid=
::使用JPS -LL命令查询出所有运行的JVM应用及对应的PID进程号
for /f "delims=" %%i in ('jps -ll') do (
    set proc=%%i
    echo !proc!
    ::比对JPS列表中每一项应用是否与KEY值相符,若相符说明此应用已运行,执行kill分支
    echo !proc!|findstr %key% >nul && set "line=!proc!" && goto kill  || echo no
)
echo end of loop
::循环结束若仍未GOTO至其他分支说明此应用未运行,执行startApp分支
goto startApp 

:kill
echo do kill processPart
echo %key%
for %%a in (!line!) do (
    echo %%a
    ::执行至kill分支说明已查找出与KEY值相符的JPS记录,由于JPS记录分为2列,只取其中第一列数据即可,批处理仅循环一次语法较复杂,改为IF条件判断。else分支不会被执行到,可省略
    if !cnt!==1 (
        set "cnt=2"
        set "pid=%%a"
        goto killP2
        ) else echo donothing

)
goto :eof

:killP2
echo do kill processPart2
echo !pid!
::强制结束对应的PID的教程
taskkill /F /PID !pid!
::强制结束进程后执行startApp分支进行重新启动应用操作
goto startApp

:startApp
echo do startApp
::打开启动脚本路径
cd /d !appPath!
::执行启动脚本
start !appBat!
goto :eof
pause

 

你可能感兴趣的:(项目集成,JAVA,批处理,JAVA,windows,jps)