Java приложение как служба windows
Я только что унаследовал приложение Java, которое должно быть установлено как служба на XP и Vista. Прошло около 8 лет с тех пор, как я использовал окна в любой форме, и мне никогда не приходилось создавать службу, не говоря уже о чем-то вроде java-приложения (у меня есть банка для приложения и один баннер зависимости - log4j). Какая магия необходима для того, чтобы этот запуск выполнялся как служба? У меня есть источник, поэтому возможны модификации кода, хотя их желательно избегать.
ОТВЕТЫ
Ответ 1
Ответ 2
Что-то, с чем я боролся с использованием Procrun, ваши методы start и stop должны принимать параметры (String [] argv). Например, "start (String [] argv)" и "stop (String [] argv)" будут работать, но "start()" и "stop()" вызовут ошибки. Если вы не можете изменить эти вызовы, подумайте над созданием класса начальной загрузки, который может массировать эти вызовы в соответствии с вашими потребностями.
Ответ 3
С Apache Commons Daemon теперь вы можете иметь собственное исполняемое имя и значок! Вы также можете получить пользовательский Монитор лотков для Windows с вашим собственным именем и значком!
Теперь у меня работает моя служба с моим собственным именем и значком (prunsrv.exe), а на мониторе панели задач (prunmgr.exe) также есть мое собственное имя и значок!
- Загрузите двоичные файлы Apache Commons Daemon (вам понадобятся prunsrv.exe и prunmgr.exe).
- Переименуйте их как MyServiceName.exe и MyServiceNamew.exe соответственно.
Загрузите WinRun4J и используйте программу RCEDIT.exe , которая поставляется вместе с ней, чтобы изменить исполняемый файл Apache, чтобы встроить свой собственный значок выглядит следующим образом:
Теперь установите вашу службу Windows (см. документация для получения более подробной информации и опций):
Теперь у вас есть служба Windows вашего Jar, которая будет работать с вашим собственным значком и именем! Вы также можете запустить файл монитора, и он запустится на панели задач с вашим собственным значком и именем.
Ответ 4
Еще одна опция WinRun4J. Это конфигурируемая java-пусковая установка, которая удваивается как хост службы Windows (как 32, так и 64-разрядные версии). Это с открытым исходным кодом, и никаких ограничений на его использование нет.
(полное раскрытие: я работаю над этим проектом).
Ответ 5
Ответ 6
Еще один ответ: Еще один инструмент Java Service Wrapper, это похоже на хорошую альтернативу Java Service Wrapper, так как имеет лучшее лицензирование. Он также предназначен для легкого перехода от JSW к YAJSW. Разумеется, для меня, совершенно нового для серверов Windows и попыток получить Java-приложение, работающее как сервис, было очень легко использовать.
Некоторые другие, которые я нашел, но не использовали:
- Java Service Launcher Я не использовал это, потому что для работы было намного сложнее, чем YAJSW. Я не думаю, что это оболочка.
- JSmooth Создание служб Window не является его основной целью, но можно сделать. Я не использовал это, потому что с 2007 года не было никакой активности.
Ответ 7
Я думаю, что Java Service Wrapper работает хорошо. Обратите внимание, что три способа интегрировать ваше приложение. Похоже, что вариант 1 будет работать лучше всего для вас, если вы не хотите менять код. Файл конфигурации может немного сумасшедшим, но просто помните, что (для варианта 1) программа, которую вы запускаете и для которой вы будете указывать аргументы, является их вспомогательной программой, которая затем запустит вашу программу. Для этого они имеют пример файла конфигурации.
Ответ 8
JavaService - это LGPL. Это очень легко и стабильно. Очень рекомендуется.
Ответ 9
Используйте winsw", который был написан для Glassfish v3, но хорошо работает с программами Java в целом.
Ответ 10
Лично вроде launch4j
Ответ 11
Я использовал JavaService с успехом. Он не обновлялся через пару лет, но был довольно солидным, когда я использовал его.
Ответ 12
Мне не понравилось лицензирование для Java Service Wrapper. Я пошел с ActiveState Perl, чтобы написать службу, которая выполняет эту работу.
Ответ 13
Я не делал ничего слишком сложного с Java, но использовал либо полный аргумент командной строки (x:\java.exe. ), либо создавал script с Ant для включения опций и установки параметры работают отлично для меня.
Ответ 14
Другим хорошим вариантом является FireDaemon. Он используется некоторыми крупными магазинами, такими как NASA, IBM и т.д.; см. их веб-сайт для полного списка.
Ответ 15
В настоящее время я требую, чтобы это запускало приложение на основе Eclipse, но мне нужно сначала установить некоторые переменные, которые являются локальными для этого приложения. sc.exe разрешает только исполняемые файлы, но не скрипты, поэтому я обратился к autoexnt.exe, который является частью ресурса Windows 2003. Он ограничивает службу одним пакетным файлом, но мне нужно только один пакет script для преобразования в службу.
Ответ 16
это просто, поскольку вам нужно добавить ярлык в
Windows 7 C:\users\All Users\Start Menu\Programs\Startup (Admin) или User home directory(%userProfile%)
Windows 10: В Run shell:startup
ПРИМЕЧАНИЕ. Это будет работать только после входа в систему
С правом администратора
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 " )
Ответ 17
Если вы используете Gradle Build Tool, вы можете попробовать windows-service-plugin, что облегчает использование Apache Commons Daemon Procrun.
Чтобы создать приложение-приложение для Java-приложений с помощью плагина, вам нужно пройти несколько простых шагов.
Создайте основной класс службы с помощью соответствующего метода.
Включите плагин в ваш файл build.gradle .
Тот же самый script фрагмент для нового, инкубационного, плагинового механизма, представленного в Gradle 2.1:
Запустите createWindowsService Gradle задачу для создания дистрибутива службы Windows.
Это все, что вам нужно сделать, чтобы создать простую службу Windows. Плагин автоматически загрузит двоичные файлы Apache Commons Daemon Procrun, извлечет эти двоичные файлы в каталог распространения службы и создаст пакетные файлы для установки/удаления службы.
В каталоге $/windows-service вы найдете служебные исполняемые файлы, пакетные сценарии для установки/удаления службы и всех библиотек времени исполнения. Чтобы установить запуск службы <project-name>-install.bat , и если вы хотите удалить запуск службы <project-name>-uninstall.bat . Для запуска и остановки службы используйте <project-name>w.exe исполняемый файл.
Обратите внимание, что запуск сервиса обработки метода должен создавать и запускать отдельный поток для выполнения обработки, а затем возвращаться. Основной метод вызывается из разных потоков при запуске и остановке службы.
Для получения дополнительной информации, пожалуйста, прочтите плагин и Apache Commons Daemon Procrun.
Ответ 18
-нативный тип Создавайте автономные пакеты приложений (если это возможно). Используйте параметр -B для предоставления аргументов используемым соединителям. Если задан тип, то создается только набор этого типа. Если тип не указан, используется все.
Для типа допустимы следующие значения:
В случае с окнами ссылайтесь на doc, мы можем при необходимости создать msi или exe.
Ответ 19
Exe4j - очень хороший вариант, хотя он не является бесплатным. Проверьте это на Exe4j В мастере создания файла .exe вы предоставляете возможность создать службу.
Почему 80% фермеров кода не могут быть архитекторами? >>>
Что касается вопроса о том, как превратить программу Java в службу Windows, не говорите мне об интерфейсе Win, я не знаком с ним.
Во-первых, превратить программу exe в службу Win
Пакетная команда запуска Java скомпилирована в программу win. Пакетный Сталкер V6.0 или quickbfc 3.6.1 Реализовать;
Затем используйте команду sc, которая поставляется с системой, чтобы создать ее как системную службу: (Чтобы проверить эффект, я добавил параметры для интерактивного запуска службы)
Обратите внимание, что команда Windows всегда была необычной:
- После "=" должен быть пробел
- Если вы хотите использовать параметр типа, вы должны установить значение 2. Например, к указанным выше каштанам добавляется первый «запустить независимо», а затем «интерактивный» для вступления в силу. В противном случае он сообщит об ошибке: [SC] CreateService FAILED 87
Using some of the options will trigger a "[SC] CreateService FAILED 87" this usually means the option used like "type" needs another declaration. In case for instance when using type= interact, the type= option must be declared again with an alternative type like own. So effectivly the service type will be type= own interactive.
После завершения создания вы можете запустить сервис: net start test
Выяснилось, что программа запускалась нормально, но служба всегда запускалась. После закрытия программы служба стала останавливаться. Почему?
Поскольку системная служба не знает, в каком состоянии была запущена ваша программа, что считается успешным запуском, а также не знает, была ли программа остановлена нормально или завершилась ненормально.
В конечном итоге способ добавления общей программы в качестве системной службы с помощью команды sc не реализует интерфейс службы Win и не соответствует требованиям для стандартной программы-демона.
Поиск в Интернете и обнаружение, что доступны инструменты разработки Microsoft:Запустите любую программу как службу Windows, используя srvany.exe
Выше статья отличная, и автор также разработал легкий инструментSrvanyUIУдобно создавать пользовательские сервисы.
Но мне не удалось после эксперимента по неизвестным причинам. Фоновый мониторинг обнаружил, что java-программа мигает, а затем быстро закрывается, возможно, причина в том, что classpath установлен неправильно.
В общем, этот метод недостаточно гибок, здесь нет намека на ошибки, а только устранение неполадок на основе опыта;
Кроме того, как упоминалось в статье, средство больше не поддерживается Microsoft, и проблемы совместимости могут возникать с версиями win7 и выше.
Инструменты из мира Java
Различные люди из крупного рогатого скота выразили свои взгляды в этом Q & A:
- The Java Service Wrapper , Самое известное и зрелое решение в отрасли
Я использовал JSW в течение долгого времени, и стабильность и масштабируемость хорошие. Усовершенствованная версия также обеспечивает обработку исключений Java, например, следует ли автоматически перезапускать службу при генерации OOM.
Недостатком является то, что платные 64-битные версии требуют покупки лицензии. Пять лет назад вам, возможно, не нужно было беспокоиться о том, нужна ли вам 64-битная JVM, но сегодня 1,5-битной кучи 32-битной памяти немного недостаточно.
wrapper.conf Пример файла конфигурации выглядит следующим образом: (официальный пакет загрузки содержит более подробные примеры и инструкции)
- Yet Another Java Service Wrapper Реализация с открытым исходным кодом, похожая на JSW
Возможно, YAJSW заменил JSW, потому что он с открытым исходным кодом и бесплатный, и поддерживает Быстрая и плавная миграция с JSW , Но есть Друзья сказали, что они напуганы загрузкой пакета 19M . так что .
- Apache Commons Daemon , Член знаменитого инструментария Apache Commons
- WinRun4J, Коллекция Java2exe2service, дополнительный экспорт в один клик плагина eclipse!
Следующие инструменты не были проверены мной, но не означают, что они не применимы:
javaservice (Не обновляется после 2006 года, метод использования неизвестен)
Java Service Launcher(Компактный, поддерживает 64-битную JVM и JRockit и другие сторонние виртуальные машины, но, к сожалению, документация относительно сырая)
Launch4jИнструмент для упаковки Jar в качестве исполняемого файла, но, к сожалению, используя конфигурацию XML, лично ничего не чувствую
Смотрите больше инструментов с открытым исходным кодом:Java-пакет с открытым исходным кодом
Давно потерянный демон Apache Commons
Сначала поговорим о чувствах: Tomcat, я думаю, многие студенты знакомы с ним с первого дня изучения Java. Увидев значок ACD, я обнаружил, что оригинальная версия установки Tomcat win использует его!
Давайте поговорим об использовании: программа ввода для версии WinprocrunИспользовать его для создания сервиса очень просто:
Есть много параметров, вы можете понять, посмотрев на комментарии. Здесь также есть китайский перевод: Procrun of Commons Daemon 。
Procrun может не только генерировать Java-классы в сервисы, но и изменять exe-сервисы в сервисах. Подробнее см. В настройках параметров.
В-четвертых, посмотрите на мощный WinRun4J
Давайте сначала поговорим о его недостатках: ему нужен класс входа, который зависит от пакета WinRun4J.jar, который имеет определенную степень связности по сравнению с ACD, вместо того, чтобы напрямую использовать основной класс запуска. Кроме того, все выглядит хорошо
The only drawback is that it requires a special class for working as a service (instead of simply calling standard main class)На официальном веб-сайте есть служба создания каштанов, которая также включена в загруженный пакет, но есть некоторые проблемы:
Вызывается в вышеуказанном классе EventLog.report Журнал, созданный методом, будет записан только в системный журнал. Управление компьютером-Инструменты системы-Просмотр событий-Приложения Чтобы увидеть
Расположение соответствующего файла журнала в системе XP: C:\WINDOWS\system32\config\ SysEvent.Evt
Очевидно, что мы хотим, чтобы журналы были более управляемыми, чем операционная система. Но я не нашел подходящий параметр для его установки, он может быть указан только программой Java.
Скомпилируйте вышеупомянутые классы, чтобы сгенерировать файл класса, а затем отредактируйте файл конфигурации. WinRun4Jc.ini :
- WinRun4Jc.ini и WinRun4Jc.exe Должен быть в том же каталоге и иметь то же имя, потому что нет параметров для указания пути к профилю .
- Вышеуказанные параметры являются обязательными, и service.id и service.name Обязательно напишите одно и то же название сервиса
- classpath.2 Указано как WinRun4J.jar Путь, потому что класс записи службы выше реализует класс в пакете
Создайте и удалите сервисы с помощью следующих команд:
WinRun4J также обеспечиваетEclipse плагинИ небольшой инструмент для добавления иконки ico в программу exe, использование очень простое, есть инструкции на официальном сайте.
В любом случае, WinRun4J эквивалентен комбинации ACD и Launch4j. Хотя общая функция не такая мощная, как у двух, у них тоже все хорошо.
Специально для студентов, использующих Eclipse, это намного удобнее: взгляните на его интимную функцию экспорта.
В общем, расскажу я вам сказку про Terracota’овский сервер. В одной далёкой галактике На одной из наших виртуалок на конторе, жила-была ВебСфера (прожорливая сволочь), которая голодала от недостатка места на жёстом диске и, как результат, приложения живущие на ней начинали сильно лагать, вследствие чего приходилось часто приходилось ребутать вирталку для нормальной жизни приложений на сфере. Но не одиноки мы во вселенной(возможно), тем не менее на Земле так точно не одни, так и на виртуалке кроме сферы жили и другие монстры, куда менее прожорливые, вроде Terracotta сервера и других приложений. Так вот, вследствие перерождения галактики перезагрузки виртуалки терракотовский сервак постоянно надо было поднимать, так как наши приложения хранящие данные в кластере не могли запуститься, потому ожидали коннекшена от лежачего сервака. Естественно, кому-то из команды постоянно приходилось запускать Терракотту вручную, что, в общем, то было утомительно:). Мною было принято решение создать галактический отряд windows сервис по поднятию сервера после перезагрузки виртуалки, что казалось задачей на 15 минут, и тут я наткнулся на Дарта Вейдера подводные камни. Хренова конечно, что из коробки в терракоте нет создания сервиса после установки.
К делу
- Windows Server 2008 какой-то edition(с установленным Windows Resource Kit Tools).
- Установленная JDK6
- Terracotta
Световые мечи
Пива- srvany.exe – утилита, позволяющая запускать любую программу как службу, позволяя тем самым создавать пользовательские службы(странно но у меня на виртуалке этого файла не было). Скачаваем с инета.
- Знаний использования реестра.(Этот недостатот быстро отпадает)
Для начала скопируем скачанный srvany.exe в папки /bin с терракотой. В моём случае нехватало батника для создания сервиса, т.к. путь к терракоте содержал
пробелы. Если кто знает как в консоли прописывать пути без пробелов, прошу писать в комменты.
Сообственно createService.bat:
sc.exe create Terracotta binPath=“c:\Program Files\terracotta-3.2.1_1\bin\srvany.exe” type=own start=auto DisplayName=“Terracotta Server 3.2.1_1”
Думаю пояснений не требуется. Windows сервис требует данных о приложении в регистре. Создаём tcservice.reg:
REGEDIT4
[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Terracotta\Parameters]
"Application"="\"C:\\Java\\jdk1.6.0_17\\bin\\java.exe\\"
"AppParameters"="-cp c:\\Program Files\\terracotta-3.2.1_1\\lib\\tc.jar -server -Xms4G –Xmx4G -XX:+HeapDumpOnOutOfMemoryError -Dtc.install-root=c:\\Program files\\terracotta-3.2.1_1 com.tc.server.TCServerMain"
"AppDirectory"="c:\\Program Files\\terracotta-3.2.1_1\\"
И запускаем его. Не знаю почему, да и в общем то времени на разборку не было, но скрипт у меня не запускался, а данные в регистр не попадали:(. Поэтому делаем всё ручками. Запускаем regedit, заходим по пути HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\Terracotta\Parameters и создаём там строковые параметры типа Application с указанием путей типа С:\\Java\\jdk1.6.0_17\\bin\\java.exe Также можно применить дополнительные параметры, если терракота работает не с дефолтовыми настройками:
"AppParameters"="-cp c:\\ Program Files \\terracotta-3.2.1_1\\lib\\tc.jar -server –Xms512M –Xmx512M -XX:+HeapDumpOnOutOfMemoryError -Dtc.install-root=c:\\terracotta\\terracotta-3.2.1_1 com.tc.server.TCServerMain -f c:\\ Program Files \\my-tc-config.xml -n Server1"
Всё сделали. Тестим заходим в Панель Управления -> Администрирование –> Службы, ищем сервис с названием Terracotta Server 3.2.1_1. Запускаем. Провеяем порты и видим, что приложение стартануло, если нет, проверьте правильность указания путей. Надо бы ещё убедиться что приложение встанет после перезагрузки виртуалки. Значит, что делаем? Выключаем сервер из розетки перезагружаем виртуалку – видим, что сервер поднялся автоматически. Ура. Таким макаром можно любое Java приложение сделать как windows сервис.
По просьбе камрада Gangsta раскрываю подробности работы NSIS-скрипта, описанного в прошлом топике. В нем было перечислено несколько файлов, входящих в тестовый дистрибутив (install.bat, wrapper.properties) и т.п. Что в них находится и зачем они нужны? С точки зрения изучения возможностей установщика NSIS эта информация избыточна: файлы и файлы, которые могли называться как угодно и содержать что угодно. Главное было — положить их в нужную папку на целевой машине. В отладочных целях в том скрипте не был предусмотрен даже автозапуск самопального install.bat (хотя возможности для этого в NSIS есть).
Однако рассмотренный пример интересен еще и тем, что устанавливает на Windows-компьютер Java-приложение в качестве сервиса, а это весьма ценно. Ведь сервис запускается скрытым для обычного пользователя образом (т.е. на экране не маячит дурацкое черное окно), может выполнять привилегированные операции, его можно перезапускать и останавливать. Как всё это реализовать, если речь идет о Java-приложении (в данном случае — Apache Felix)?
Вообще-то, на затронутую тему я уже писал на Мтааламу. Однако было это в самом начале жизни сайта и материал почти никто не заметил (судя по его рейтингу и количеству комментариев). Да и сам топик был беглый: есть, мол такой проект — Java Service Wrapper, посвященный именно запуску Java приложений в качестве сервисов, причем как под Windows, так и под *NIX. Хорошо, что спустя год появился повод вернуться вернуться к этой теме.
Если вы скачаете дистрибутив Java Service Wrapper, то обнаружите там множество файлов на все случаи жизни: для разных версий Windows и Linux. Из них для запуска сервиса на обычной Windows-XP нужны только три:
* wrapper-windows-x86-32.exe
* wrapper-windows-x86-32.dll
* wrapper.jar
плюс конфигурационный файл, настроив который, вы можете запускать любое консольное Java-приложение, имеющее метод public static void main(String[] args) в виде сервиса. В зависимости от ключей, сервис может быть:
запущен в консольном режиме в целях отладки (без установки в качестве сервиса):
Осталось рассмотреть конфигурационный файл. В случае с Apache Felix он выглядит так:
По-моему, особые комментарии не требуются. Скажу лишь, что поскольку файл содержит кириллические буквы, желательно сохранить его в кодировке Cp1251, иначе его название в списке сервисов Windows будет крокозябрами. А о том, что всё это работает и сервис действительно появляется в списке, свидетельствует скриншот из старого топика:
Читайте также:
- Не удалось выполнить вход невозможно выполнить вход в это приложение или на этот сайт
- Назовите элементы окна excel которые не встречаются в других приложениях
- Как записаться на вождение в приложении автошкола контроль
- Как создать приложение вконтакте для группы
- Приложение тинькофф инвестиции не работает форум