如何通过退出代码使用 Procrun 自动重启 java 应用程序
How to auto restart a java application using Procrun by Exit Code
我的应用程序具有自我更新功能。
它自己下载一个新版本,当下载过程结束时发生这种情况时,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"
所以,这行将:
- 注册一个名为
my-service-name
的 windows 服务,该服务启动我的 jar (java) 应用程序的副本。
- 将参数设置为
NSSM
以在启动服务之前将 my-app.jar
复制到 snapshot.jar
。
- 将参数设置为
NSSM
以指定,当我的应用程序终止时,默认行为假设服务必须停止
- 将参数设置为
NSSM
以指定当我的应用程序以 退出代码 2 终止时必须重新启动(我的 java 应用程序)服务必须继续 运行.
- 将参数设置为
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
.
退出时,批处理将保持循环(重新启动我的应用程序)
我的应用程序具有自我更新功能。
它自己下载一个新版本,当下载过程结束时发生这种情况时,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"
所以,这行将:
- 注册一个名为
my-service-name
的 windows 服务,该服务启动我的 jar (java) 应用程序的副本。 - 将参数设置为
NSSM
以在启动服务之前将my-app.jar
复制到snapshot.jar
。 - 将参数设置为
NSSM
以指定,当我的应用程序终止时,默认行为假设服务必须停止 - 将参数设置为
NSSM
以指定当我的应用程序以 退出代码 2 终止时必须重新启动(我的 java 应用程序)服务必须继续 运行. - 将参数设置为
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
.