Как автоматически перезапустить Java-приложение, используя Procrun от Exit Code - PullRequest
1 голос
/ 23 октября 2019

Мое приложение имеет функцию самообновления.

Он загружает новую версию самостоятельно, и когда это происходит в конце процесса загрузки, JVM завершает работу с кодом 2 .

Возможно настроить Procrun для автоматического перезапуска службы при возникновении кода выхода 2 ?

1 Ответ

1 голос
/ 01 ноября 2019

Я решил использовать другой инструмент для запуска моего приложения в качестве службы: 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. Зарегистрировать службу Windows с именем my-service-name, которая запускает копию моего приложения jar (java).
  2. Установить параметр для NSSM для копированияmy-app.jar до snapshot.jar перед запуском службы.
  3. Установите для параметра значение NSSM, чтобы указать, что при завершении работы моего приложения поведение по умолчанию предполагает, что служба должна остановиться
  4. Установитьпараметр NSSM, чтобы указать, что когда мое приложение завершает работу с кодом выхода 2 , оно должно быть перезапущено (мое приложение Java), и служба должна продолжать работать.
  5. Установитепараметр 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%

И используя т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.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...