gpt4 book ai didi

procrun - 如何使用 Procrun 通过退出代码自动重新启动 Java 应用程序

转载 作者:行者123 更新时间:2023-12-03 08:51:45 26 4
gpt4 key购买 nike

我的应用程序具有 self 更新功能。

它会自行下载新版本,当下载过程结束时发生这种情况时,JVM 将退出并显示代码 2

是否可以将 Procrun 配置为在出现退出代码 2 时自动重新启动服务?

最佳答案

我解决了使用另一个工具将我的应用程序作为服务运行的问题:NSSM

使用它,我向 NSSM 注册一个参数,如下所示:

nssm install my-service-name "java -jar snapshot.jar"
nssm set my-service-name AppEvents "Start/Pre" "cmd /c copy /y my-app.jar snapshot.jar"
nssm set my-service-name AppExit Default Exit
nssm set my-service-name AppExit 2 Restart
nssm set my-service-name AppDirectory "c:\path\to\my\app"

所以,这一行将:

  1. 注册一个名为 my-service-name 的 Windows 服务,该服务启动我的 jar (java) 应用程序的副本。
  2. NSSM 设置参数,以便在启动服务之前将 my-app.jar 复制到 snapshot.jar
  3. NSSM 设置一个参数,以指定当我的应用终止时,默认行为假设服务必须停止
  4. NSSM 设置一个参数,以指定当我的应用程序以退出代码 2 终止时,必须重新启动它(我的 Java 应用程序)并且服务必须继续运行运行。
  5. NSSM 设置一个参数,以指定我的应用将使用当前目录作为 c:\path\to\my\app

另一个解决方案是创建 batch file进入循环,如下所示(我将其命名为 run-app.bat):

@echo off
set java=C:\Program Files (x86)\Java\jre1.8.0_192
:start
copy /y my-app.jar snapshot.jar
if %errorlevel% equ 0 goto :run
if %errorlevel% neq 0 goto :end
:run
"%java%\bin\java.exe" -jar snapshot.jar --start
if %errorlevel% equ 2 goto :start
:end
exit /b %errorlevel%

并使用NSSM以简单的方式注册服务:

nssm install my-service-name "cmd /c run-app.bat"
nssm set my-service-name AppDirectory "c:\path\to\my\app"

在这种情况下,NSSM 将仅启动我的批处理 run-app.bat。当应用程序以代码 2 退出时,批处理将保持循环(重新启动我的应用程序)。

关于procrun - 如何使用 Procrun 通过退出代码自动重新启动 Java 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58529075/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com