我的应用程序具有自我更新功能。
它会自行下载新版本,当下载过程结束时发生这种情况时,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"
Run Code Online (Sandbox Code Playgroud)
所以,这一行将:
my-service-name注册一个名为who 启动我的 jar (java) 应用程序副本的Windows 服务。NSSM复制my-app.jar到。snapshot.jarNSSM来指定,当我的应用程序终止时,默认行为是假设服务必须停止NSSM来指定,当我的应用程序以退出代码 2终止时,必须重新启动它(我的 java 应用程序)并且服务必须继续运行。NSSM来指定我的应用程序将使用当前目录作为c:\path\to\my\app
另一个解决方案是创建一个循环批处理文件,如下所示(我称之为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%
Run Code Online (Sandbox Code Playgroud)
并使用 NSSM 以简单的方式注册服务:
nssm install my-service-name "cmd /c run-app.bat"
nssm set my-service-name AppDirectory "c:\path\to\my\app"
Run Code Online (Sandbox Code Playgroud)
在这种情况下,NSSM 将仅启动我的批次run-app.bat。当应用程序以 code 退出时,批处理将保持循环(重新启动我的应用程序)2。
| 归档时间: |
|
| 查看次数: |
1009 次 |
| 最近记录: |