Служба Windows – это специальная служебная программа, которая запускается операционной системой автоматически при загрузке вне зависимости от статуса пользователя или вручную (в зависимости от настроек).
Службы работают в фоновом режиме и, как правило, выполняют различные технологические задачи.
Также, в отличие от «обычных» программ, службы не имеют графического интерфейса и управляются при помощи специального диспетчера.
Настройка приложения локального средства выполнения как службы
Вы можете настроить локальное средство выполнения в качестве службы, чтобы автоматически запускать его при запуске компьютера.
Примечание. Добавьте средство выполнения в GitHub, прежде чем настроить приложение локального средства выполнения в качестве службы. Дополнительные сведения см. в разделе Добавление локальных средств выполнения.
Для систем Linux, использующих systemd , можно воспользоваться скриптом svc.sh , который создан после успешного добавления средства выполнения, для установки приложения в качестве службы и управления им.
Уроки C# – Создаём свою службу Windows
На компьютере средства выполнения откройте оболочку в каталоге, где установлено приложение локального средства выполнения. Используйте приведенные ниже команды, чтобы установить службу локального средства выполнения и управлять ею.
Примечание. Настройка приложения локального средства выполнения в качестве службы в Windows является частью процесса настройки приложения. Если вы уже настроили приложение локального средства выполнения, но не в качестве службы, необходимо удалить средство выполнения из GitHub и повторно настроить приложение. При повторной настройке приложения выберите параметр настройки приложения как службы.
Вы можете управлять службой средства выполнения в приложении Службы Windows или использовать PowerShell для выполнения приведенных ниже команд.
Примечание. Добавьте средство выполнения в GitHub, прежде чем настроить приложение локального средства выполнения в качестве службы. Дополнительные сведения см. в разделе Добавление локальных средств выполнения.
На компьютере средства выполнения откройте оболочку в каталоге, где установлено приложение локального средства выполнения. Используйте приведенные ниже команды, чтобы установить службу локального средства выполнения и управлять ею.
Установка службы
- Остановите приложение локального средства выполнения, если в данный момент оно запущено.
- Установите службу с помощью следующей команды:
sudo ./svc.sh install
./svc.sh install USERNAME
Установка службы
- Остановите приложение локального средства выполнения, если в данный момент оно запущено.
- Установите службу с помощью следующей команды:
./svc.sh install
Запуск службы
Запустите службу с помощью следующей команды:
sudo ./svc.sh start
Start-Service «actions.runner.*»
./svc.sh start
Проверка состояния службы
Проверьте состояние службы с помощью следующей команды:
Active Directory, учетные записи. Создание домена, групповая политика [Windows Server 2012] #2
sudo ./svc.sh status
Get-Service «actions.runner.*»
./svc.sh status
Дополнительные сведения о просмотре состояния локального средства выполнения тестов см. в разделе Мониторинг и устранение неполадок в самостоятельно размещенных средствах выполнения.
Остановка службы
Остановите службу с помощью следующей команды:
sudo ./svc.sh stop
Stop-Service «actions.runner.*»
./svc.sh stop
Удаление службы
- Остановите службу, если она работает в данный момент.
- Удалите службу с помощью следующей команды:
sudo ./svc.sh uninstall
Remove-Service «actions.runner.*»
./svc.sh uninstall
Настройка службы локального средства выполнения
Если вы не хотите использовать указанную выше конфигурацию службы systemd по умолчанию, можно создать настраиваемую службу или использовать любой предпочитаемый механизм службы. Рассмотрите возможность использования шаблона serviced в actions-runner/bin/actions.runner.service.template качестве справки. Если вы используете настроенную службу, служба локального средства выполнения всегда должна вызываться с помощью точки входа runsvc.sh .
Настройка службы локального средства выполнения
Если вы не хотите использовать указанную выше конфигурацию службы launchd по умолчанию, можно создать настраиваемую службу или использовать любой предпочитаемый механизм службы. Рассмотрите возможность использования шаблона plist в actions-runner/bin/actions.runner.plist.template качестве справки. Если вы используете настроенную службу, служба локального средства выполнения всегда должна вызываться с помощью точки входа runsvc.sh .
Источник: docs.github.com
Java приложение как служба windows
В общем, расскажу я вам сказку про 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 Filesterracotta-3.2.1_1binsrvany.exe” type=own start=auto DisplayName=“Terracotta Server 3.2.1_1”
Думаю пояснений не требуется. Windows сервис требует данных о приложении в регистре. Создаём tcservice.reg:
REGEDIT4
[HKEY_LOCAL_MACHINESYSTEMCurrentControlSetServicesTerracottaParameters]
«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_MACHINESYSTEMCurrentControlSetServicesTerracottaParameters и создаём там строковые параметры типа 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 сервис.
Jar файл как служба windows (и бонусом jar to exe)
Итак, ваш проект дожил до продакшена и хотелось бы стартовать его вместе с системой, а не поднимать ручками каждый раз. Но как нам это сделать с обычным jar’ником?
Есть кучка вариантов:
I) Положить в стартап винды батник с запуском java -jar или экзешник (предварительно сделав из jar’а exe-файл).
Это решит проблему, вот только запускаться ваше приложение будет в лучшем случае при первом входе в систему любого юзера (если кинуть в стартап для all users), а, как известно, хороший админ на сервер не лазит.
II) Сделать task в винде, стартующий батник при старте системы.
Этот вариант решает проблему с запуском на ура, вот только манипуляция приложением на этом заканчивается, ни старт-стопа тебе в любое время, ни перезапуска по ошибке.
III) Можно запустить jar’ник в виде службы винды с помощью sc.exe (есть ещё Srvinstw.exe — гуёвая версия, но мы же тру-программисты и должны использовать командную строку).
Это маленькая программа из Resource Kit для создания служб из exe-шников.
Но у нас ведь jar-файл?! Не беда! Есть варианты на попробовать:
1) запускать напрямую java.exe -jar с параметрами.
2) сделать из jar’a exe-file и превратить его в службу.
3) юзать srvany.exe
а) запускать из него java.exe –jar
б) написать bat-ник с запуском java -jar и запускать его
IV) Заюзать сторонний софт.
Разгребём эту кучку, пропустив первые 2 пункта как наименее интересные.
0) Приложение
Для начала напишем небольшое приложение c блэк-джеком и ресурсами, зависимыми от передаваемых параметров, дабы прочувствовать максимум боли в агонии попыток заставить его работать в виде службы.
— ругаться на то, что параметров нет
— в зависимости от них читать те или иные файлики настроек
— парсить внешней библиотекой эти настройки
— каждые 5 секунд сыпать в лог снова эти же настройки
Пример приложения можно посмотреть здесь:
Моим результатом будет executable jar-файл, с зависимыми библиотеками и ресурсами снаружи в отдельной папке. Вы можете сделать, как хотите, поэкспериментируйте.
1) Запуск службы с sc.exe
Итак, чтобы ознакомиться со справкой sc достаточно ввести
Результатом будет «Ошибка. Неопознанная команда» и далее справка по возможным командам.
А) Создаём службу с java.exe –jar
У меня jdk таскается за собой, чтобы не зависеть от имеющихся на серверах версий и для придачи моей программе солидности в виде большого объёма. Полный путь к java.exe в случае наличия её в переменных окружения, не обязателен. Стоит отметить одну назойливую и малозаметную особенность: « binPath= » — после любого параметра (тут binPath) сразу идёт знак равенства, а после него обязательно пробел перед значением этого параметра.
Отлично, служба создана, запускаем её! Упс.
(у меня TestService будет иметь в примерах разные цифры, т.к. не всегда служба удалялась сразу, иногда она только помечалась на удаление)
Смотрим на всякий случай, не появился ли лог нашего приложения. А он-таки есть! Только крохотный, содержащий инфу с момента попытки запуска службы до момента выдачи ошибки. Что произошло? А вот что:
— старт службы запустил java.exe с нужными параметрами
— наше приложение начало свою работу
— менеджер служб винды ждёт некоторое время ответа от java.exe о её успешном (или нет) запуске
— но java.exe ничего не возвращает, потому что она никому ничего не должна
— менеджер служб отсчитал положенные по таймауту секунды и отстрелил джаву
Вывод: не каждый exe-шник одинаково полезен для запуска в виде службы. Нельзя просто так взять и запустить любой exe-шник, он должен быть специально заточен под виндовые службы (как минимум возвращать некие данные о своём запуске).
А может javaw попробуем? Попробуйте, вот только double-V в имени не означает двойную победу.
Б) Создаём службу с cmd /c java.exe -jar
А что если запустить cmd в cmd в cmd и в ней бахнуть джаву? Закроется вся цепочка? Начнём с малого — запустим просто джаву из cmd, а саму cmd укажем как binpath при запуске службы:
Точно также отваливаемся по тайм-ауту, вот только завершает свою никчёмную жизнь лишь процесс cmd, а наше мега джава приложение продолжает дышать и радовать.
Работает? Да! Как полноценная служба? Да ни в зуб!
Но положим наш джарник в папку с пробелами, чтобы ещё немного поэкранировать насладиться созиданием наклонных палочек подле кавычек:
Заглянем в реестр:
Выглядит неплохо, только параметры бы ещё в кавычки запихнуть для полного счастья.
Вывод: трюки — это хорошо, но не всегда полезно на все 100%.
В) Создаём службу с srvany.exe java.exe –jar
srvany.exe — это тоже программулина из Resource Kit. Её работа проста — запускать указанное приложение. Т.е. мы регистрируем srvany.exe в качестве службы с параметрами, указывающими путь к нашей программе. Порядок: стартуем службу → стартует srvany → стартует наше приложение.
Добавим параметры для запуска srvany:
Стартуем.. наблюдаем.. ждём.. наблюдаем.. работает!! Всё? Это конец? Или чего-то не хватает? Зачем придумывали сторонний софт (кроме цели самообучения и рекламы)?
А вы попробуйте убить процесс или вызвать в нём ошибку. А мы плавно перейдём к следующему пункту.
Вывод: srvany работает, но хромает ловля ошибок.
2) Запуск службы сторонним софтом NSSM.
Краткий список разного софта:
— jsvc (версия для извращенцев: «It can run on Win32 via the Cygwin emulation layer» (с))
Вот последний-то мы и используем. Для ленивых повторим вопрос: так зачем нам сторонний софт? Для них же ответ есть прямо с сайта nssm:
«srvany and other service helper programs suck because they don’t handle failure of the application running as a service. If you use such a program you may see a service listed as started when in fact the application has died. nssm monitors the running service and will restart it if it dies.»
Как оно работает? Всё также: nssm.exe устанавливается в качестве службы с определёнными параметрами, при старте этой службы запускается сам nssm.exe, который в свою очередь запускает java.exe –jar. Вот вам сразу наглядный запуск в диспетчере задач:
Теперь по порядку. Выполняем « nssm.exe install TestServ » для запуска GUI.
Тоже самое можем сделать с помощью командной строки:
AppDirectory установить для нас важно, т.к. используемые нами конфиги и библиотеки лежат именно там, рядом с нашим приложением в поддиректориях resources, res.
Если служба вам надоела, или вы накосячили при её создании, то выполните команду:
Java application as Windows Service
In this blog post, I show you how to install a Java application with WinSW as a Windows service. WinSW is an executable binary, which can be used to wrap and manage any custom process as a Windows service.
First, we need a demo application. I use a simple Quarkus application for this purpose. You can install any Java application as a service. Usually, you install applications that run forever like an HTTP server in this case.
To bootstrap a Quarkus application run this command
We use the application as is with just a small change. I want to create a fat jar. A jar with all dependent libraries included.
You can package your application in any way you want. In this case, I prefer the fat jar installation because I only have to copy one file.
Open srcmainresourcesapplication.properties and insert the following property
Now you can package the application with .mvnw.cmd package . You find the jar in the target folder: testservice-1.0.0-SNAPSHOT-runner.jar
Preparation
You can proceed in different ways. I usually create a new folder where I copy all the files into it that are needed to run the application as a service. Copy the jar from the target folder into this directory.
Next, I download the Java Runtime and also copy it into this folder. This is optional. Your service can access a globally installed Java. But I like to have everything contained in one folder and don’t have to worry about somebody updating or removing the globally installed Java.
I usually download Java from Adoptium. On the release page, you find the ZIP file with the JDK for Windows.
Download the ZIP file and unzip it into the install folder. I unzip it into the java subfolder, so the java.exe is accessible with this path javabinjava.exe
WinSW
Open the release page of the WinSW project and download the executable suitable for your platform.
https://github.com/winsw/winsw/releases
For this demo installation, I download WinSW.NET461.exe . WinSW runs on Windows with .NET Framework 2.0, 4.0 or 4.6.1. If you need to install the service on a Windows without .NET framework, download the core variant WinSW-x64.exe for 64-bit or WinSW-x86.exe` for 32-bit systems.
Copy the executable also into the folder where your jar resided. Rename the WinSW executable to any name you like. For this example, I rename it to testservice.exe . Create an XML with the same base name: testservice.xml . Make sure that the exe and XML file are located in the same folder.
Open the XML file and paste the following code into it.
Check the executables path and arguments. %BASE% is an environment variable that points to the directory where the WinSW executable is located. If you want to start the application with a Java that is on the %PATH% , just use java .
Relevant here is . This tells WinSW to shutdown the parent process first. In our case this is useful because the main process opens a console ( java ), which can respond to Ctrl+C and will gracefully shutdown the child process (the Java application).
Check out this wiki page to learn more about all the supported options:
https://github.com/winsw/winsw/blob/master/doc/xmlConfigFile.md
Directory structure
The directory structure of my install folder.
Installation
With everything in place you install the Windows service with this command
The WinSW command supports the following options:
- install : Install the service
- uninstall : Uninstall the service
- start : Start the installed service
- stop : Stop the service
- restart : Restart the service
- status : Show the current service status (NonExistent, Started, Stopped)
The service by default is installed with start mode Automatic . That means Windows starts the service when it boots up. You can change that with the configuration in the XML file.
To test the installation, open http://localhost:8080 in a browser. You should see the default start page of Quarkus. To test if the graceful shutdown works, stop the service
Open the file testservice.out.log .
We see that the application shutdown gracefully because of the testservice stopped log entry.
Note that WinSW creates by default three logs files:
- .out.log : Console output from the application ( System.out.println )
- .err.log : Error output from the application ( System.err.println )
- .wrapper.log : Log output from WinSW itself
That concludes this tutorial about installing any Java applications as Windows Service. Optionally you could try and create a native image of your application with GraalVM. The service installation does not change a lot. You don’t need the JRE anymore and have to change accordingly.
Name already in use
If nothing happens, download GitHub Desktop and try again.
Launching GitHub Desktop
If nothing happens, download GitHub Desktop and try again.
Launching Xcode
If nothing happens, download Xcode and try again.
Launching Visual Studio Code
Your codespace will open once ready.
There was a problem preparing your codespace, please try again.
Latest commit
Git stats
Files
Failed to load latest commit information.
README.MD
Java App as Windows Service
I used NSSM for help me on this task. NSSM is a service helper which doesn’t suck.
Похожие публикации:
- Roxio creator business что это за программа
- Где купить домен отзывы
- Как лучше подключить телевизор к интернету через wifi или кабель
- Чем формула отличается от функции
Источник: gshimki.ru