Как создать службу windows из java jar? - PullRequest
51 голосов
/ 24 октября 2009

У меня есть исполняемый файл JAR. Можно ли создать службу Windows этого JAR? На самом деле, я просто хочу запустить это при запуске, но я не хочу помещать этот JAR-файл ни в мою папку запуска, ни в реестр.

Ответы [ 8 ]

44 голосов
/ 09 сентября 2013

Самое простое решение, которое я нашел для этого, это Non-Sucking Service Manager

Использование будет

nssm install <servicename> "C:\Program Files\Java\jre7\java.exe" "-jar <path-to-jar-file>"
16 голосов
/ 24 октября 2009

Эта статья должна рассказать вам все, что вам нужно знать: «Запуск приложений Java в качестве службы Windows» ; в нем упоминается " Java Service Wrapper " (существует версия сообщества под названием YAJSW )

15 голосов
/ 25 февраля 2016

Используйте nssm.exe, но не забудьте установить AppDirectory, иначе все необходимые библиотеки или ресурсы будут недоступны. По умолчанию nssm устанавливает текущий рабочий каталог в каталог приложения, java.exe, а не в jar. Так что сделайте это, чтобы создать пакетный скрипт:

    pushd <path-to-jar>
    nssm.exe install "<service-name>" "<path-to-java.exe>" "-jar <name-of-jar>"
    nssm.exe set "<service-name>" AppDirectory "<path-to-jar>"

Это должно исправить проблему приостановленной службы.

10 голосов
/ 18 марта 2010

Я экспериментировал с Apache Commons Daemon . Он поддерживает Windows ( Procrun ) и Unix ( Jsvc ). У расширенного установщика есть учебник Java Service с примером загружаемого проекта. Если вы запустили их javaservice.jar в качестве службы Windows, вы можете проверить его с помощью "telnet 4444". Я использовал их пример, потому что я сосредоточился на том, чтобы запустить службу Windows Java, а не писать Java.

7 голосов
/ 24 октября 2009

Тануки изменил лицензию на jsw некоторое время назад, и если бы я собирался начать проект, я бы использовал еще один Java Service Wrapper, http://yajsw.sourceforge.net/, который более или менее является реализацией с открытым исходным кодом, имитирующей JWS, а затем опирается на него и еще больше улучшает.

РЕДАКТИРОВАТЬ: Я использую YAJSW в течение нескольких лет на нескольких платформах (Windows, несколько Linux ...), и это здорово, разработка продолжается.

3 голосов
/ 28 февраля 2013

С помощью procrun вам нужно скопировать prunsrv в каталог приложения ( скачать ) и создать install.bat, например:

set PR_PATH=%CD%
SET PR_SERVICE_NAME=MyService
SET PR_JAR=MyService.jar
SET START_CLASS=org.my.Main
SET START_METHOD=main
SET STOP_CLASS=java.lang.System
SET STOP_METHOD=exit
rem ; separated values
SET STOP_PARAMS=0
rem ; separated values
SET JVM_OPTIONS=-Dapp.home=%PR_PATH%
prunsrv.exe //IS//%PR_SERVICE_NAME% --Install="%PR_PATH%\prunsrv.exe" --Jvm=auto --Startup=auto --StartMode=jvm --StartClass=%START_CLASS% --StartMethod=%START_METHOD% --StopMode=jvm --StopClass=%STOP_CLASS% --StopMethod=%STOP_METHOD% ++StopParams=%STOP_PARAMS% --Classpath="%PR_PATH%\%PR_JAR%" --DisplayName="%PR_SERVICE_NAME%" ++JvmOptions=%JVM_OPTIONS%

Я полагаю,

  • запустите это из того же каталога, где jar и prunsrv.exe
  • банка имеет свой рабочий МАНИФЕСТ.МФ
  • и у вас есть хуки отключения, зарегистрированные в JVM (например, с помощью context.registerShutdownHook () в Spring) ...
  • не использовать относительные пути для файлов за пределами jar (например, log4j следует использовать с log4j.appender.X.File = $ {app.home} /logs/my.log или чем-то похожим)

Обратитесь к руководству по procrun и этого руководства для получения дополнительной информации.

1 голос
/ 24 октября 2009

Для этого мы используем Сервисный упаковщик Tanuki . Это очень настраиваемый.

0 голосов
/ 30 апреля 2018

Другой вариант: winsw: https://github.com/kohsuke/winsw/

Настройте xml-файл, чтобы указать имя службы, что выполнять, какие-либо аргументы и т. Д. И использовать exe для установки. Пример xml: https://github.com/kohsuke/winsw/tree/master/examples

Я предпочитаю это nssm, потому что это один легкий exe; и конфиг xml легко поделиться / зафиксировать в исходном коде.

PS служба устанавливается с помощью your-service.exe install

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