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.
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.
Spóźniony na przyjęcie, ale okna węzłów też się sprawdzą.
Posiada również wbudowane logowanie systemowe.
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.
Wydało mi się to tak przydatne, że zbudowałem wokół niego jeszcze łatwiejszy w użyciu wrapper ( npm , github ).
Instalowanie:
Instalowanie usługi:
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:
prompt: Service name: [name of your service] prompt: Node script path: [path of your node script] Service stopped Service uninstalled
źródło
WinSer jest przyjaznym dla node.js opakowaniem wokół popularnego NSSM (Non-Sucking Service Manager)
źródło
Z tego bloga
źródło
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:
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”:
źródło
pm2
korzystanie 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/1079Podejś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ćzainstaluje usługę.
stdout
istderr
wszystkie 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>
źródło