Я только что унаследовал Java-приложение, которое нужно установить как службу на XP и Vista. Прошло около 8 лет с тех пор, как я использовал окна в любой форме, и мне никогда не приходилось создавать сервис, не говоря уже о чем-то вроде java-приложения (у меня есть jar-файл для приложения и единственный jar-файл зависимости - log4j ). Какая магия необходима для того, чтобы этот запуск работал как услуга? У меня есть исходный код, поэтому возможны модификации кода, хотя их желательно избегать.
Просто для полноты: здесь serverfault.com/a/259195 говорит, что приложение должно отвечать на обратные вызовы Service Control Manager. Прочтите это руководство, в нем используется Procrun ticklingmind.blogspot.com/2010/03/…
Другой ответ stackoverflow.com/questions/5953525/…




Мне повезло с оболочка службы Java
Java Service Wrapper выглядит очень полезным. Но я посмотрел на список функций. Вам просто нужно знать, что версия сообщества не лицензирована для использования на сервере.
Это могло быть проблемой. Это было несколько лет назад. Думаю, они решили зарядить.
Эта оболочка используется множеством проектов с открытым исходным кодом, в том числе некоторыми на Jakarta Apache, такими как ActiveMQ.
Что мне нравится в оболочке, так это то, что ее можно настроить для перезапуска JVM, если она заблокируется.
Обертка @Vladimir Tanuki больше не является открытой для 64-битной арки.
Раньше я успешно использовал JavaService. Он не обновлялся пару лет, но когда я его использовал, он был довольно надежным.
GForge больше не выпускается
Рабочие ссылки: multiplan.co.uk/software/javaservice (документация) download.forge.ow2.org/javaservice (исходный код и двоичные файлы) Я унаследовал проект, использующий JavaService. Он отвечает нашим потребностям, даже если он уже немного устарел.
Мне не понравилось лицензирование Java Service Wrapper. Я пошел с ActiveState Perl, чтобы написать службу, которая выполняет эту работу.
Я думал о написании службы на C#, но мои временные рамки были слишком жесткими.
Не могли бы вы предоставить образец хака, который вы сделали с "perl" ..!
Я всегда использую sc.exe (см. http://support.microsoft.com/kb/251192). Он должен быть установлен на XP с пакетом обновления 1 (SP1), и если он вам не подходит, вы можете загрузить его с помощью комплекта ресурсов Vista.
Я не делал ничего слишком сложного с Java, но использование либо полностью определенного аргумента командной строки (x: \ java.exe ....), либо создание сценария с Ant для включения зависимостей и установки параметров мне подходит.
Это позволяет вам запускать что-то как службу, но, в моем понимании, это будет отсоединено, то есть вы не сможете остановить его с помощью служб или перезапустить автоматически и т.д. Я могу полностью ошибаться - только начал изучать это.
Я думаю, что Оболочка служб Java работает хорошо. Обратите внимание, что есть три пути для интеграции вашего приложения. Похоже, что вариант 1 подойдет вам лучше всего, учитывая, что вы не хотите менять код. Файл конфигурации может показаться немного сумасшедшим, но просто помните, что (для варианта 1) программа, которую вы запускаете и для которой вы будете указывать аргументы, является их вспомогательной программой, которая затем запустит вашу программу. У них для этого есть пример файла конфигурации.
Еще один хороший вариант - FireDaemon. Его используют некоторые крупные магазины, такие как NASA, IBM и т. Д .; см. их веб-сайт для получения полного списка.
В настоящее время я требую это для запуска приложения на основе Eclipse, но сначала мне нужно установить некоторые переменные, локальные для этого приложения. sc.exe разрешает только исполняемые файлы, но не скрипты, поэтому я обратился к autoexnt.exe, который является частью Комплект ресурсов Windows 2003. Он ограничивает службу одним пакетным файлом, но мне нужен только один пакетный сценарий для преобразования в службу.
Чао!
Еще один вариант - WinRun4J. Это настраиваемая программа запуска Java, которая выполняет роль хоста службы Windows (как 32-, так и 64-разрядные версии). Это открытый исходный код, и нет никаких ограничений на его использование.
(полное раскрытие: я работаю над этим проектом).
Спасибо за это. Я пробовал YAJWS, и сначала он напугал меня загрузкой 19 МБ, а после того, как я выполнил инструкции, он показал «ошибку синтаксического анализа командной строки». Я посмотрел на PROCRUN, и он слишком громоздкий для быстрой настройки. INSTSRV / SRVANY требует изменений в реестре! Launch4J упаковывает JAR в EXE, что усложняет развертывание. WinRun4J идеально подошел. Единственный недостаток заключается в том, что для работы в качестве службы требуется специальный класс (вместо простого вызова стандартного основного класса). Но в целом он идеален на 99%.
К вашему сведению, последняя версия имеет оболочку для стандартного основного класса.
Привет, Вы можете привести какой-нибудь пример, объясняющий, как это использовать? Я хотел бы использовать его для запуска экземпляра HelioSearch в качестве фоновой службы Windows при запуске системы.
JavaService - это LGPL. Это очень просто и стабильно. Настоятельно рекомендуется.
Демон Apache Commons - хорошая альтернатива. Он имеет Procrun для служб Windows и Jsvc для демонов unix. Он использует менее ограничительную лицензию Apache, а Apache Tomcat использует ее как часть себя для работы в Windows и Linux! Заставить его работать немного сложно, но есть исчерпывающая статья с рабочим примером.
Кроме того, вы можете посмотреть bin \ service.bat в Apache Tomcat, чтобы понять, как настроить службу. В Tomcat они переименовывают двоичные файлы Procrun (prunsrv.exe -> tomcat6.exe, prunmgr.exe -> tomcat6w.exe).
Что-то, с чем я боролся с использованием Procrun, ваши методы запуска и остановки должны принимать параметры (String [] argv). Например, «start (String [] argv)» и «stop (String [] argv)» будут работать, но «start ()» и «stop ()» вызовут ошибки. Если вы не можете изменить эти вызовы, подумайте о создании класса загрузчика, который может обрабатывать эти вызовы в соответствии с вашими потребностями.
Используя отражение, вы, вероятно, могли бы обойти проблему, о которой говорили в последнем абзаце. Кроме того, демон apache commons - единственная известная мне оболочка, которая имеет предварительно созданные 64-битные двоичные файлы для бесплатного использования.
Вам нужен возврат каретки между каждым параметром JVM. Например, если у вас в той же строке -Dopt1 = a -Dopt2 = b, это может не сработать. Чтобы исправить это нужно написать --JvmOptions=-Dopt=a#-Dopt2=b. Я запускал команду из сценария муравья и боролся из-за этого несколько дней. Надеюсь, это поможет.
Статья, о которой вы говорили, давно не существует ... У вас еще есть способ добраться до нее? Мне не удается заставить Apache Commons Daemon делать то, что мне нужно.
@ 11101101b, похоже, что apache вложил всю статью в свой собственная вики-страница ...
@community wiki, я использовал Демон Apache Commons для 64-битной машины Windows, он успешно добавил службу. пока я использую те же процессы для 32-разрядной машины с Windows 7, он не может добавить службу.
Еще один ответ - Еще одна оболочка служб Java, это кажется хорошей альтернативой Java Service Wrapper, поскольку имеет лучшее лицензирование. Также предполагается, что его будет легко перейти с JSW на YAJSW. Конечно, для меня, новичка в серверах Windows и попытки запустить приложение Java как службу, было очень легко использовать.
Некоторые другие я нашел, но не использовал:
+1 от меня, так как это было самое быстрое решение для меня «из коробки», и никаких изменений в java-приложении не потребовалось, что является несомненным плюсом.
Я нашел эту очень убедительную сравнительную таблицу, в которой YAJSW сравнивается с несколькими другими распространенными оболочками служб. yajsw.sourceforge.net/#mozTocId284533
Довольно хорошее сравнение различных решений доступно по адресу: http://yajsw.sourceforge.net/#mozTocId284533
Лично нравится launch4j
Используйте "победа", который был написан для Glassfish v3, но в целом хорошо работает с программами Java.
Требовать наличия установленной среды выполнения .NET.
Между тем текущая версия (поддерживаемая известным Kohsuke Kawaguchi) расположена здесь.
Похоже, он переместил его на github после версии 1.9 (скорее всего, когда он перешел с Oracle на Cloudbees).
С Демон Apache Commons теперь вы можете иметь собственное имя и значок исполняемого файла! Вы также можете получить настраиваемый монитор в трее Windows с вашим собственным именем и значком!
Теперь у меня запущена служба с моим собственным именем и значком (prunsrv.exe), а у монитора на панели задач (prunmgr.exe) также есть мое собственное имя и значок!
Загрузите Бинарные файлы Apache Commons Daemon (вам понадобятся prunsrv.exe и prunmgr.exe).
Переименуйте их в MyServiceName.exe и MyServiceNamew.exe соответственно.
Загрузите WinRun4J и используйте прилагаемую к нему программу RCEDIT.exe, чтобы изменить исполняемый файл Apache, чтобы встроить свой собственный значок, например:
> RCEDIT.exe /I MyServiceName.exe customIcon.ico
> RCEDIT.exe /I MyServiceNamew.exe customTrayIcon.ico
Теперь установите службу Windows следующим образом (см. документация для получения дополнительных сведений и опций):
> MyServiceName.exe //IS//MyServiceName \
--Install = "C:\path-to\MyServiceName.exe" \
--Jvm=auto --Startup=auto --StartMode=jvm \
--Classpath = "C:\path-to\MyJarWithClassWithMainMethod.jar" \
--StartClass=com.mydomain.MyClassWithMainMethod
Теперь у вас есть служба Windows вашего Jar, которая будет работать с вашим собственным значком и именем! Вы также можете запустить файл монитора, и он будет запускаться на панели задач с вашим собственным значком и именем.
> MyServiceNamew.exe //MS//MyServiceName
Я все сделал по вашему Как сделать, но это не меняет значок в панели задач .. есть идеи почему?
Извините, @outofBounds, я не видел вашего комментария до сих пор. Программа RCEDIT.exe - это то, что изменяет значок исполняемого файла службы. Убедитесь, что у вас есть действующий ICO-файл с правильно определенными размерами. Вы можете увидеть, как создать правильный .ico файл здесь: stackoverflow.com/questions/4354617/…
Просто чтобы вы знали, у вас не может быть пробелов в имени службы.
@ 11101101b, это будет работать на 32-битной машине с Windows 7?
Да, @Shakthi, он отлично работает на 32 и 64-битных Windows XP, 7, 8, 8.1, Server 2003, 2008 и 2012.
Это может быть не окончательный ответ, но выполните следующие команды c: \ Temp> prunsrv.exe // IS // VIJAY создать службу с именем VIJAY c: \ temp \ prunmgr.exe // ES // VIJAY запустить пользовательский интерфейс для редактирования службы VIJAY Its легко редактировать параметры из пользовательского интерфейса
Да, @Syamsoul Azrein, он отлично работает на 10 и любой серверной версии.
Спасибо, что указали мне правильное направление. Также см. joerglenhard.wordpress.com/2012/05/29/… для более полного примера.
Простой способ - это оболочка Оболочка NSSM (см. мою запись в блоге).
NSSM ROCKS! Я легко делаю обертку даже из своей java-программы. Легко, легко, работает - счастья 100кб! Спасибо!
Любой пример, как использовать NSSM Wrapper для запуска экземпляра Java-приложения (я использую HelioSearch) в качестве службы Windows в фоновом режиме при запуске системы?
@GiordanoMaestro, ваша запись в блоге больше не доступна. У вас есть еще одна ссылка?
По сравнению с Apache Commons Daemon, wrapper.tanukisoftware.org и yajsw NSSM был, безусловно, самым быстрым и простым вариантом для превращения простого Java-приложения в службу Windows.
Я пытаюсь использовать NSSM для запуска исполняемого файла jar для весенней загрузки. Я получил эту ошибку: «Неожиданный статус SERVICE_PAUSED в ответ на элемент управления START».
Разработчик @java видит этот ответ от "gcerkez" stackoverflow.com/questions/1617458/…
У меня был файл .cmd с java -jar myapp.jar, который запускает мое приложение Java. Установил как услугу практически за 3 минуты. Такой ветерок ... Моя единственная жалоба связана с названием ... Можете ли вы придумать лучшее имя, в котором используется слово "S ***"?
@VenVig, не могли бы вы рассказать мне, как вы запускали команду java -jar в качестве службы Windows? Любая помощь будет оценена по достоинству!
@NikhilSinghBhadoriya извините, я не заметил этот вопрос до сих пор. Однако, если он вам все еще нужен, все, что я сделал, это поместил команду java -jar в пакетный файл Windows и направил NSSM для запуска этого пакетного файла в качестве службы.
Exe4j - очень хороший вариант, хотя и платный. Проверьте это на Exe4j. В мастере создания файла .exe вам предоставляется возможность создать службу.
это просто, потому что вам нужно добавить ярлык
Windows 7C:\users\All Users\Start Menu\Programs\Startup (администратор) или User home directory(%userProfile%)
Windows 10:
В работе shell:startup
в его свойстве -> ярлык -> цель -> java.exe -jar D:\..\runJar.jar
ПРИМЕЧАНИЕ. Это запустится только после входа в систему.
С правом администратора
sc create serviceName binpath= "java.exe -jar D:\..\runJar.jar" создаст службу Windows
если вы получите тайм-аут, используйте cmd /c D:\JAVA7~1\jdk1.7.0_51\bin\java.exe -jar d:\jenkins\jenkins.war, но даже с этим вы получите тайм-аут, но в фоновом режиме будет запущен java.exe. Проверить в диспетчере задач
ПРИМЕЧАНИЕ. Это будет выполняться при запуске входа в систему Windows (перед входом в систему, на основе службы Startup Type).
Если вы используете Gradle Build Tool, вы можете попробовать мой плагин службы Windows, который облегчает использование Демон Procrun Apache Commons.
Чтобы создать Java-приложение-службу Windows с помощью плагина, вам необходимо выполнить несколько простых шагов.
Создайте основной класс обслуживания с помощью соответствующего метода.
public class MyService {
public static void main(String[] args) {
String command = "start";
if (args.length > 0) {
command = args[0];
}
if ("start".equals(command)) {
// process service start function
} else {
// process service stop function
}
}
}
Включите плагин в свой файл build.gradle.
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.com.github.alexeylisyutenko:windows-service-plugin:1.1.0"
}
}
apply plugin: "com.github.alexeylisyutenko.windows-service-plugin"
Тот же фрагмент скрипта для нового инкубационного механизма плагинов, представленного в Gradle 2.1:
plugins {
id "com.github.alexeylisyutenko.windows-service-plugin" version "1.1.0"
}
Настроить плагин.
windowsService {
architecture = 'amd64'
displayName = 'TestService'
description = 'Service generated with using gradle plugin'
startClass = 'MyService'
startMethod = 'main'
startParams = 'start'
stopClass = 'MyService'
stopMethod = 'main'
stopParams = 'stop'
startup = 'auto'
}
Запустите задачу Gradle createWindowsService, чтобы создать дистрибутив службы Windows.
Это все, что вам нужно сделать, чтобы создать простую службу Windows. Плагин автоматически загрузит двоичные файлы Apache Commons Daemon Procrun, распакует эти двоичные файлы в каталог распространения службы и создаст командные файлы для установки / удаления службы.
В каталоге ${project.buildDir}/windows-service вы найдете исполняемые файлы службы, пакетные сценарии для установки / удаления службы и все библиотеки времени выполнения.
Чтобы установить службу, запустите <project-name>-install.bat, а если вы хотите удалить службу, запустите <project-name>-uninstall.bat.
Для запуска и остановки службы используйте исполняемый файл <project-name>w.exe.
Обратите внимание, что запуск службы обработки метода должен создать и запустить отдельный поток для выполнения обработки, а затем вернуться. Основной метод вызывается из разных потоков при запуске и остановке службы.
Для получения дополнительной информации прочтите о плагине и Apache Commons Daemon Procrun.
Недооцененный ответ!
С Java 8 мы можем справиться с этим сценарием без каких-либо внешних инструментов. Инструмент javapackager, поставляемый с java 8, предоставляет возможность создавать автономные пакеты приложений:
-родной тип Создавайте автономные пакеты приложений (если возможно). Используйте параметр -B для предоставления аргументов используемым сборщикам пакетов. Если тип указан, то создается только связка этого типа. Если тип не указан, используется все.
Для типа допустимы следующие значения:
-native type
Generate self-contained application bundles (if possible). Use the -B option to provide arguments to the bundlers being used. If type is specified, then only a bundle of this type is created. If no type is specified, all is used.
The following values are valid for type:
all: Runs all of the installers for the platform on which it is running, and creates a disk image for the application. This value is used if type is not specified.
installer: Runs all of the installers for the platform on which it is running.
image: Creates a disk image for the application. On OS X, the image is the .app file. On Linux, the image is the directory that gets installed.
dmg: Generates a DMG file for OS X.
pkg: Generates a .pkg package for OS X.
mac.appStore: Generates a package for the Mac App Store.
rpm: Generates an RPM package for Linux.
deb: Generates a Debian package for Linux.
В случае окон обратитесь к следующему док, мы можем создать msi или exe по мере необходимости.
exe: Generates a Windows .exe package.
msi: Generates a Windows Installer package.
Этот ответ не отвечает на вопрос. Javapackager нельзя использовать для создания службы Windows напрямую, а скорее создать автономный исполняемый файл, например включает jre и другие ресурсы.
Другое предложение stackoverflow.com/a/9262081/381897