如果jar应用程序尚未运行,请使用batch来启动它

时间:2016-03-30 23:13:57

标签: java windows batch-file

关闭所有人群这不是问题How to check if a process is running via a batch script的重复,因为可能有多个 java.exe < / strong>进程正在运行(就像我的情况一样),我只需要检查特定的jar。这就是为什么我在标题中写了 jar java application 的原因。

我有一个&#34; Minecraft服务器&#34;在我的桌面上启动Spigot minecraft服务器的图标。我使用这样的run.bat文件来完成这项工作:

:start
java -Xmx1024M -Xms1024M -jar spigot-1.8.7.jar
pause
goto start

无限循环使服务器重启更简单。现在有时会发生我或其他使用计算机的人尝试在服务器已经运行时启动服务器。我想防止这种情况发生。一些事情:

IF spigot_server_running (
    echo The server is already running. If you can't connect, try to check the console window for errors.
    echo if all else fails, terminate the java process from task manager.
    pause
    exit 1
)

我可以做些什么来检测它?我想运行进程的列表可以像Linux grep那样进行解析。但是,是否有一些命令行工具可以将此与java JRE或JDK一起分发?我不会为此任务安装额外的程序,但我更喜欢官方的Java API。但请记住,它必须适用于批处理或Windows CScript文件。

1 个答案:

答案 0 :(得分:0)

所以我发现这个jps实用程序可以方便地列出正在运行的java进程及其参数。我在评论中表示我认为有这样的事情,但需要一段时间来挖掘出正确的用途。我创建了以下脚本:

@echo off
setlocal enabledelayedexpansion
echo Checking for %1
for /f "tokens=1" %%i in ('jps -m ^| find "%1"') do (
  echo Jar already running
  goto end
)
echo Jar not running
:end
pause

用法:

> isjarrunning.bat something.jar

名称区分大小写

为了在IF语句中使用此脚本,必须进行调整:

isjarrunning.bat

@echo off
IF [%1] == [] (
  echo Invalid parameter. Usage:
  echo     isjarrunning.bat NameOfTheJarFile.jar
  exit /B 2
)
for /f "tokens=1" %%i in ('jps -m ^| find "%1"') do (
  exit /B 1
)
exit /B 0

脚本中的用法:

testjarrunning.bat

@echo off
call isjarrunning.bat MyProgram.jar
echo Error level: %errorlevel%
if errorlevel 1 (
   echo Jar file already running!
   exit /b 1
) ELSE (
   echo Starting jar file
   start javaw -jar path\MyProgram.jar
)
echo Ende