Jak zainstalować node.js jako usługę Windows?

132

Pobrałem node.js wykonywalny. Jak mogę uruchomić ten plik wykonywalny jako usługę systemu Windows? Nie mogę użyć standardowego instalatora node.js, ponieważ muszę jednocześnie uruchomić wiele wersji node.js.

TN.
źródło

Odpowiedzi:

191

Spóźniony na przyjęcie, ale okna węzłów też się sprawdzą.

wprowadź opis obrazu tutaj

Posiada również wbudowane logowanie systemowe.

wprowadź opis obrazu tutaj

Istnieje API do tworzenia skryptów z kodu, tj

var Service = require('node-windows').Service;

// Create a new service object
var svc = new Service({
  name:'Hello World',
  description: 'The nodejs.org example web server.',
  script: 'C:\\path\\to\\helloworld.js'
});

// Listen for the "install" event, which indicates the
// process is available as a service.
svc.on('install',function(){
  svc.start();
});

svc.install();

FD: Jestem autorem tego modułu.

Corey
źródło
3
po drugie, że „niesamowite”. Po prostu postępowałem zgodnie z instrukcjami readme i działało od razu po wyjęciu z pudełka - bardzo rzadko! tylko jedna rzecz, którą możesz chcieć dodać do pliku Readme: jak uruchomić utworzony skrypt js w CLI: tj.> node set_up_win_service.js ...
mike gryzoń
@Corey w jakikolwiek sposób mogę uruchomić pakiet JXCore jako usługę za pomocą tego modułu?
Madhur
@Madhur - Teoretycznie może to zadziałać, ale nie mam i nie planuję tego testować. node-windows używa pliku wrapper.js, który jest odpowiedzialny za monitorowanie / ponowne uruchamianie. To tylko uruchamia skrypt węzła jako proces potomny. Możliwe jest również skonfigurowanie ścieżki wykonywalnej (tj. Jx zamiast węzła). Więc teoretycznie mógłbyś to zrobić, ale nie mam pojęcia, jakie dziwactwa możesz potencjalnie spotkać.
Corey,
@Corey Mam prostą aplikację Http Node, ale nie wydaje się, aby działała przy użyciu tej usługi. Instaluje się i uruchamia poprawnie, ale natychmiast się zatrzymuje. Jakakolwiek pomoc byłaby bardzo mile widziana! Przeglądarka zdarzeń nie wyświetla żadnych błędów, ale ostrzeżenie: proces potomny [50732 - C: \ Program Files \ nodejs \ node.exe --harmony "C: \ Users \ bmechkov \ AppData \ Roaming \ npm \ node_modules \ node-windows \ lib \ wrapper.js "-f" C: \ dev \ Node \ abs_tips \ server.js "-l" NODE ABS TIPS "-g 0,25 -w 1 -r 3 -an] zakończone 0
Mechkov
@Mechkov - Zakończenie na 0 oznacza udane wyjście. Czy możesz pomyślnie uruchomić skrypt bez okien węzła?
Corey,
40

Wydało mi się to tak przydatne, że zbudowałem wokół niego jeszcze łatwiejszy w użyciu wrapper ( npm , github ).

Instalowanie:

npm install -g qckwinsvc

Instalowanie usługi:

qckwinsvc

prompt: Service name: [name for your service]
prompt: Service description: [description for it]
prompt: Node script path: [path of your node script]
Service installed

Odinstalowywanie usługi:

qckwinsvc --uninstall

prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
Hariram Nandagopal
źródło
Dzięki, bardzo łatwo !! quarky, to działa dla mnie (wygraj 10 64 bity)
Furkan
„Npm ERR! asyncWrite nie jest funkcją ”„ npm ERR! pna.nextTick nie jest funkcją ”
Timwi
28

WinSer jest przyjaznym dla node.js opakowaniem wokół popularnego NSSM (Non-Sucking Service Manager)

Predrag Stojadinović
źródło
nie podoba NSSM, ponieważ zakłada, że ​​nie zasysa, ponieważ obsługuje awarię hostowanej aplikacji, więc w rzeczywistości jest to aplikacja wysysająca hostowana. Nie lubię ogólnie obwiniać Microsoftu tylko dlatego, że to Microsoft.
Felice Pollano,
2
@FelicePollano NSSM zakłada, że ​​nie zasysa, ponieważ monitoruje hostowaną aplikację, w przeciwieństwie do innych rozwiązań, takich jak srvany, które pozostawiają usługę w stanie uruchomionym, nawet jeśli opakowany proces umiera.
Jürgen Steinblock
@ JürgenSteinblock to jest dokładnie to, co powiedziałem: jest gospodarzem ssanie aplikacja, nie menedżer sama usługa
Felice Pollano
2
@FelicePollano Wyjście z hostowanej aplikacji nie musi oznaczać czegoś złego. Chodzi o to: NSSM odzwierciedla (lub może odzwierciedlać, jeśli jest poprawnie skonfigurowany) rzeczywisty stan usługi, dzięki czemu usługa może być monitorowana zamiast po prostu zakładać stan działania, jak inne menedżery usług (jako użytkownik mogę zabić hostowany proces, a srvary nadal będzie pokazywać usługa w stanie uruchomionym).
Jürgen Steinblock
16

Z tego bloga

Następnie chciałem hostować węzeł jako usługę, podobnie jak IIS. W ten sposób uruchamia się z moim komputerem, działa w tle, uruchamia się ponownie automatycznie w przypadku awarii i tak dalej.

W tym miejscu pojawia się nssm , niezasysający menedżer usług. To narzędzie umożliwia hostowanie zwykłego pliku .exe jako usługi systemu Windows.

Oto polecenia, których użyłem, aby skonfigurować wystąpienie aplikacji twojego węzła jako usługę, otwórz cmd like administrator i wpisz następujące polecenia:

nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js
net start service_name
Michael Horojanski
źródło
14

Nie odpowiadam na to pytanie bezpośrednio, ale zapewniam alternatywę, która może również spełnić Twoje wymagania w sposób bardziej node.js.

Wymagania funkcjonalne to:

  1. Uruchom logikę (aplikację) w tle
  2. Umiejętność uruchamiania / zatrzymywania logiki
  3. Automatycznie uruchamiaj logikę po uruchomieniu systemu

Wymagania te można spełnić, korzystając z menedżera procesów (PM) i uruchamiając menedżera procesów podczas uruchamiania systemu. Dwóch dobrych menedżerów przyjaznych dla systemu Windows to:

Aby PM uruchamiał się automatycznie, najprostszym sposobem jest utworzenie zaplanowanego zadania z wyzwalaczem „Przy uruchomieniu”:

wprowadź opis obrazu tutaj

KFL
źródło
Jeśli spróbujesz rozpocząć pm2korzystanie ze skryptu wsadowego podczas uruchamiania, pamiętaj o dołączeniu zmiennych środowiskowych, w przeciwnym razie nie zadziała. Omówiono tutaj: github.com/Unitech/pm2/issues/1079
steampowered
@steampowered jak podać ścieżkę PM2_Home?
charan tej
0

Podejście do menedżera procesów i harmonogramu zadań, które opublikowałem rok temu, działa dobrze w przypadku niektórych jednorazowych instalacji usług. Ale ostatnio zacząłem projektować system w sposób mikro-usługowy, z wieloma małymi usługami rozmawiającymi ze sobą za pośrednictwem IPC. Dlatego ręczne konfigurowanie każdej usługi stało się nie do zniesienia.

Mając na celu instalowanie usług bez ręcznej konfiguracji, stworzyłem serman , narzędzie wiersza poleceń (zainstaluj za pomocą npm i -g serman), aby zainstalować plik wykonywalny jako usługę. Wszystko, co musisz napisać (i tylko raz), to prosty plik konfiguracyjny usługi wraz z plikiem wykonywalnym. Biegać

serman install <path_to_config_file>

zainstaluje usługę. stdouti stderrwszystkie są rejestrowane. Aby uzyskać więcej informacji, odwiedź witrynę internetową projektu .

Działający plik konfiguracyjny jest bardzo prosty, jak pokazano poniżej. Ale ma też wiele przydatnych funkcji, takich jak <env>i <persistent_env>poniżej.

<service>
  <id>hello</id>
  <name>hello</name>
  <description>This service runs the hello application</description>

  <executable>node.exe</executable>

  <!-- 
       {{dir}} will be expanded to the containing directory of your 
       config file, which is normally where your executable locates 
   -->
  <arguments>"{{dir}}\hello.js"</arguments>

  <logmode>rotate</logmode>

  <!-- OPTIONAL FEATURE:
       NODE_ENV=production will be an environment variable 
       available to your application, but not visible outside 
       of your application
   -->
  <env name="NODE_ENV" value="production"/>

  <!-- OPTIONAL FEATURE:
       FOO_SERVICE_PORT=8989 will be persisted as an environment
       variable machine-wide.
   -->
  <persistent_env name="FOO_SERVICE_PORT" value="8989" />
</service>
KFL
źródło