【问题标题】:How to auto restart a java application using Procrun by Exit Code如何通过退出代码使用 Procrun 自动重启 Java 应用程序
【发布时间】:2019-10-23 18:33:07
【问题描述】:

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

它自己下载一个新版本,当下载过程结束时发生这种情况时,JVM 会以代码 2 退出。

如果退出代码2出现,是否可以配置Procrun自动重启服务?

【问题讨论】:

  • 你能解决这个问题吗?基本上,我需要知道是否可以将退出代码从包装的应用程序传播回 procrun?
  • @tryingToLearn 看我的回答stackoverflow.com/a/58658051/1470436

标签: procrun


【解决方案1】:

我使用另一个工具将我的应用程序作为服务运行: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 退出时,批处理将保持循环(重新启动我的应用程序)。

【讨论】:

    猜你喜欢
    • 2022-12-19
    • 1970-01-01
    • 1970-01-01
    • 2013-04-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多