[Java][Windows] Instalowanie jar`a jako usługi systemu windows

Czasem zachodzi potrzeba aby nasza usługa włączała się i pracowała jako usługa. Możemy tego dokonać dzięki programowi NSSM, a to wszystko przy użyciu konsoli albo graficznego interfejsu.
Dzięki NSSM możemy utworzyć usługę która automatycznie się resetuje gdy zostaje przerwane jej zadanie i włącza z systemem windows. Ewentualnie skonfigurować jej działanie pod nasze potrzeby. Jest darmową alternatywą dla płatnych aplikacji tego typu jak http://wrapper.tanukisoftware.com/.
Działa na Windowsach 32-bitowych jak i 64-bitowych.

Instalacja własnego service jest prosta.

1. Po pierwsze potrzebujemy mieć napisaną jakaś aplikację w javie i wyeksportowaną jako runnable jar.

2. Pobieramy i przenosimy do jakiegoś folderu nssm. Dodatkowo możemy przypisać do niego zmienną środowiskową path dzięki temu szybciej będziemy mogli odnieść się do niego z linii komend cmd.

3. Nasz runnable jar przenosimy do folderu instalacji np. tam gdzie mamy nssm albo w dowolne inne miejsce.

4. Tam gdzie umieściliśmy naszego jara tworzymy plik *.bat np. start.bat. O zawartości:

@ECHO OFF
REM <nazwa-naszego-bata>.bat  code
java -jar  WindowsServiceTutorial.jar %1

%1 jest to parametr przekazany plikowi bat, który pośredniczy w przekazaniu go naszemu jarowi.

5. Uruchamiamy cmd.

6. Jeśli pomineliśmy tworzenie PATH`a, to przechodzimy ręcznie do folderu w którym mamy nssm do katalogu z odpowiednią wersją windowsa np.:

cd C:\JavaWindowsService\nssm-2.24\win64

7. Wykonujemy polecenie pod <servicename> wpisując własną nazwę naszej usługi.

nssm install <servicename>

8. Naszym oczom powinien ukazać się GUI do konfiguracji naszego service:


9. Jako path podajemy nasz plik start.bat. Opcjonalnie jeśli nasza aplikacja posiada jakieś argumenty to możemy je wpisać w label Arguments.

To właściwie wszystko jeśli chodzi o podstawowy rozruch usługi windows. Warto jednak pobawić się dodatkowymi opcjami jakie udostępnia aplikacja.

Details:



W zakładce Details możemy podać nazwe naszego service i podać jego opis. Oraz ustawić opcje startup czyli jak aplikacja ma być startowana po uruchomieniu systemu. Mamy do dyspozycji takie tryby jak:
- Automatic: automatycznie uruchamia naszą usługę.
- Automatic(delay): uruchamia naszą usługę z opóźnieniem.
- Manual: musimy ręcznie uruchomić usługę.
- Disable: opcje autostartu są wyłączone.



Process:



Kolejną przydatną zakładką jest Procces, gdzie możemy ustawić wartości związane z wykorzystaniem CPU. M.in przypisać priorytet dla danej usługi a także określić z jakich rdzeni może korzystać nasza usługa.

I/O:

Dzięki tej zakładce możemy wykorzystać wyjście konsolowe naszej aplikacji jako informacje o pracy naszej aplikacji. Dzięki temu możemy uniknąć konfigurowania loggera, albo wykorzystać te dane które trafiają na konsolę np. poprzez System.out.print() albo System.err.print()



Wystarczy podać jako Output path do naszego pliku w którym usługa ma zapisywać wyjście konsoli.

File rotation:



Dopełnieniem wyjścia z konsoli jest kolejna zakładka która pozwala nam nadpisywać plik .log.