@echo off
title dbsync setup

rem jar平级目录
set AppName=test-admin.jar
set pid=
set image_name=

rem JVM参数
set JAVA_HOME=%~dp0jdk\windows\jdk1.8.0_421
set CLASSPATH=.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
set PATH=%JAVA_HOME%\bin;%SystemRoot%/system32;%SystemRoot%;
set JVM_OPTS="-Duser.timezone=Asia/Shanghai -Xms512m -Xmx16384m -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=1024m -XX:+HeapDumpOnOutOfMemoryError -XX:+PrintGCDateStamps  -XX:+PrintGCDetails -XX:NewRatio=1 -XX:SurvivorRatio=30 -XX:+UseParallelGC -XX:+UseParallelOldGC"

call :help

:help
ECHO.
    ECHO.  [1] 后台进程启动
    ECHO.  [2] 关闭后台进程
    ECHO.  [3] 重启后台进程 
    ECHO.  [4] 后台进程状态 
    ECHO.  [5] 安装服务并启动
    ECHO.  [6] 停止服务并卸载
    ECHO.  [7] 退出
ECHO.请输入选择项目的序号:
set /p ID=
    IF "%id%"=="0" GOTO start0
    IF "%id%"=="1" GOTO start
    IF "%id%"=="2" GOTO close
    IF "%id%"=="3" GOTO restart
    IF "%id%"=="4" GOTO status
    IF "%id%"=="5" GOTO InstallService
    IF "%id%"=="6" GOTO UninstallService  
    IF "%id%"=="7" EXIT
    IF "%id%"==""  GOTO help
    IF "%id%"==" " GOTO help
goto:help

:start0
    set pid=
    set image_name=
    for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
        set image_name=%%b
    )
    if not "%pid%"=="" ( echo %image_name% 正在运行,无法启动新的实例 
     ) else (
       java -jar %JVM_OPTS%  -Dloader.path=%~dp0conf,%~dp0lib %~dp0lib\%AppName%
     )
goto:help


:start
    echo.启动中 . . .
    set pid=
    set image_name=
    for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
        set image_name=%%b
    )
    if not "%pid%"=="" ( echo %image_name% 正在运行,无法启动新的实例  ) else (
       start javaw -jar %JVM_OPTS%  -Dloader.path=%~dp0conf,%~dp0lib %~dp0lib\%AppName% 

       rem 等待几秒
       ping 127.0.0.1 -n 15 > nul
    )
       set pid=
       set image_name=
       for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
        set image_name=%%b
    )
       if not "%pid%"=="" ( echo.启动%AppName%成功 ) else ( echo.启动%AppName%失败 )
pause
goto:help

rem 函数stop通过jps命令查找pid并结束进程
:close
echo.关闭中 . . .
        set pid=
        set image_name=
    for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
        set image_name=%%b
    )
    if "%pid%"=="" (echo 进程 %AppName% 不存在) else (
        echo 准备杀死 %image_name%
        echo 准备杀死 %pid% ...
        rem 根据进程ID, 杀死进程
        taskkill /f /pid %pid%
    
                rem 等待几秒
                ping 127.0.0.1 -n 6 > nul
        )

        set pid=
        set image_name=
        for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
           set pid=%%a
           set image_name=%%b
    )
        if "%pid%"=="" ( echo.关闭%AppName%成功 ) else ( echo.关闭%AppName%失败 )
pause
goto:help

:restart
echo.关闭中 . . .
        set pid=
        set image_name=
        for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
        set image_name=%%b
    )
    if "%pid%"=="" (
        echo 进程 %AppName% 不存在
        ) else (
        echo 准备杀死 %image_name%
        echo 准备杀死 %pid% ...
        rem 根据进程ID, 杀死进程
        taskkill /f /pid %pid%
    )

       rem 等待几秒
       ping 127.0.0.1 -n 6 > nul

       echo.启动中 . . .
       set pid=
       set image_name=
       for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
        set image_name=%%b
    )
    if not "%pid%"=="" (echo %image_name% 正在运行,无法启动新的实例 ) else (
                start javaw -jar %JVM_OPTS%  -Dloader.path=%~dp0conf,%~dp0lib %~dp0lib\%AppName% 
                echo.启动 %AppName% 成功

                 rem 等待几秒
                 ping 127.0.0.1 -n 15 > nul
         )

         set pid=
         set image_name=
         for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
           set pid=%%a
           set image_name=%%b
     )
         if not "%pid%"=="" ( echo.重启%AppName%成功 ) else ( echo.重启%AppName%失败 )
pause
goto:help


:status
        set pid=
        set image_name=
    for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
        set image_name=%%b
    )
    if "%pid%"=="" ( echo 进程%AppName%不存在 ) else ( echo 进程%AppName%正在运行 )
pause
goto:help

rem 注册为Windows服务需要借助服务注册工具:nssm.exe,开源工具,自己下载最新版即可

:InstallService
    set pid=
    set image_name=
    for /f "usebackq tokens=1-2" %%a in (`jps -l ^| findstr %AppName%`) do (
        set pid=%%a
        set image_name=%%b
    )
    if not "%pid%"=="" ( echo %image_name% 正在运行,无法启动新的实例 ) else (
       %~dp0/bin/nssm.exe install %AppName% %JAVA_HOME%\bin\java.exe 
       %~dp0/bin/nssm.exe set %AppName%AppParameters -jar %JVM_OPTS%  -Dloader.path=%~dp0conf,%~dp0lib %~dp0lib\%AppName% 
       %~dp0/bin/nssm.exe set %AppName% DisplayName %AppName% 
       %~dp0/bin/nssm.exe set %AppName% Description %AppName% 
       %~dp0/bin/nssm.exe set %AppName% AppDirectory %~dp0 
       %~dp0/bin/nssm.exe set %AppName% AppStdout nul
       %~dp0/bin/nssm.exe set %AppName% AppStderr nul
       sc start %AppName% 

     rem 等待几秒
     ping 127.0.0.1 -n 15 > nul
        )
    
     sc query DbSync-Client | find "RUNNING" > nul
     if %ERRORLEVEL% == 0 (
        echo.服务"%AppName%"启动成功
     ) else (
        echo.服务"%AppName%"启动失败
     )

pause
goto:help


:UninstallService
     echo prepare to stop the service %AppName%
     %~dp0/bin/nssm.exe stop %AppName%

     rem 等待几秒
     ping 127.0.0.1 -n 5 > nul

     %~dp0/bin/nssm.exe remove %AppName% confirm
pause
goto:help


pause

Logo

Agent 垂直技术社区,欢迎活跃、内容共建。

更多推荐