Uruchamianie aplikacji python jako usługi w systemie Windows

Wspominałam, że pracuję nas schedulerem w aplikacji opartej o framework web2py. Tak jak obiecałam, napiszę o tym wkrótce. Tymczasem musiałam rozwiązać inny problem związany z tym zagadnieniem. Wspomnę tylko, że aby zadania schedulera działały, trzeba uruchomić odpowiedni worker, który pracuje w tle i zażąda uruchamianiem zdefiniowanych w bazie zadań. Można oczywiście worker uruchamiać ręcznie, ale wtedy każde wyłączenie aplikacji czy systemu powoduje, że worker trzeba uruchamiać ponownie. Wiadomo co się stanie jak ktoś o tym zapomni przy restarcie aplikacji po niespodziewanym jej zatrzymaniu. O wiele lepiej jest zdefiniować worker jako usługę systemu Windows, uruchomić ją i po prostu o niej zapomnieć.

Okazuje się, że istnieje nieskomplikowana i skuteczna aplikacja, która to umożliwia NSSM. Pokażę krok po kroku jak prawidłowo użyć tej aplikacji.

Instalacja NSSM

Właściwie nie jest potrzebna żadna instalacja. Wystarczy pobrać aplikację, rozpakować do dowolnego katalogu i już jest gotowa do użycie. Warto zwrócić uwagę, że w katalogu aplikacji znajdują się dwa podkatalogi z różnymi wersjami programu w zależności od wersji procesora.

nssm zawartość katalogu

Tworzenie usługi

Aby zarejestrować usługę w systemie należy uruchomić wiersz poleceń wybierając opcję “Uruchom jako administrator”, da nam to dostęp do opcji zarówno tworzenia jak i uruchamiania usługi.

uruchamianie wiersza poleceń cmd

Następnie należy przejść do katalogu w którym znajduje się rozpakowana aplikacja NSSM w wersji odpowiedniej dla naszego procesora i uruchomić instrukcję:

C:\nssm\win64>nssm install nazwa_uslugi

Parametr ‘nazwa_uslugi’ jest opcjonalny, można go ustawić w kolejnym kroku. Po uruchomieniu powyższej instrukcji pojawi się okno aplikacji nssm, w którym należy ustawić odpowiednie parametry usługi.

nssm: tworzenie usługi

W pozycji Path należy podać ścieżkę do pliku pythonw.exe odpowiedniej wersji pythona aby wskazać interpreter skryptu. Pozycja Startup directory zostanie ustawiona automatycznie i nie ma potrzeby jej modyfikować. W pozycji Arguments należy podać ścieżkę do skryptu, który ma być uruchamiany jako usługa. Po zatwierdzeniu przyciskiem [Install service] powinniśmy otrzymać następującą odpowiedź, świadczącą o pomyślnym dodaniu usługi do systemu:

nssm: instalacja pomyślna

Zarządzanie usługą

Utworzona w taki sposób usługa jest nieaktywna, co można sprawdzić wpisując w linii poleceń komendę:

C:\nssm\win64>nssm status nazwa_uslugi

Otrzymamy następującą odpowiedź:

nssm: status usługi

Aby uruchomić usługę należy w wierszu poleceń wywołać następującą komendę:

C:\nssm\win64>nssm start nazwa_uslugi

Jeśli wszystko przebiegło pomyślnie zobaczymy następująca odpowiedź:

nssm: uruchomienie usługi

W razie wystąpienia błędu należy przejrzeć systemowy dziennik zdarzeń aby znaleźć przyczynę. Za pomocą linii poleceń można również zatrzymywać, edytować i usuwać usługi. Pełną listę dostępnych komend można uzyskać po wpisaniu w linii poleceń następującej komendy:

C:\nssm\win64>nssm start nazwa_uslugi

Wywołuje ona okno pomocy aplikacji NSSM:

nssm: okno pomocy

Na zakończenie tylko dodam, że stworzona przeze mnie w ten sposób usługa działa i prawidłowo uruchamia worker obsługujący zadania schedulera.

1 komentarz do wpisu “Uruchamianie aplikacji python jako usługi w systemie Windows”

Leave a Reply

%d bloggers like this: