My application has a self-update feature.
It downloads a new version by itself, and when this occurrs at the end of the download process the JVM exits with code 2.
Is possible to configure the Procrun to auto-restart the service if the exit code 2 occurrs ?
I solved using another tool for running my application as a service: NSSM
With it, I register a parameter to NSSM like this:
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"
So, this lines will:
my-service-name
who launches a copy of my jar (java) application.NSSM
to copy my-app.jar
to snapshot.jar
before start the service.NSSM
to specify that, when my app terminates the default behavior is assuming that the service must stopNSSM
to specify that, when my app terminates with the exit code 2 it must be restarted (my java application) and the service must continue to running.NSSM
to specify that my app will using the current directory as c:\path\to\my\app
Another solution is creating a batch file to be on loop, like this (I called it 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%
And using the NSSM to register the service in a simple way:
nssm install my-service-name "cmd /c run-app.bat"
nssm set my-service-name AppDirectory "c:\path\to\my\app"
In this scenario, the NSSM will just launch my batch run-app.bat
.
The batch will stay on loop (restarting my app) while the application exits with code 2
.