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.