Windows hizmeti olarak node.js nasıl kurulur?


130

Ben indirmiş node.js çalıştırılabilir. Bu yürütülebilir dosyayı Windows hizmeti olarak nasıl çalıştırabilirim? Aynı anda birden çok node.js sürümünü çalıştırmam gerektiğinden standart node.js yükleyicisini kullanamıyorum.

Yanıtlar:


187

Partiye geç kaldı, ancak düğüm pencereleri de işe yarayacak.

görüntü açıklamasını buraya girin

Ayrıca yerleşik sistem günlüğü vardır.

görüntü açıklamasını buraya girin

Koddan komut dosyaları oluşturmak için bir API vardır, yani

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: Bu modülün yazarıyım.


3
ikincisi "harika". Benioku talimatlarınızı takip ettim ve kutudan çıktığı gibi işe yaradı - çok nadir! Benioku dosyasına eklemek isteyebileceğiniz tek bir şey var: oluşturulan js komut dosyası CLI'de nasıl çalıştırılır: yani> düğüm set_up_win_service.js ...
mike rodent

@Corey, bu modülü kullanarak JXCore paketini bir servis olarak çalıştırabilir miyim ?
Madhur

@Madhur - Teorik olarak işe yarayabilir, ancak test etmedim ve planlamıyorum. node-windows, izleme / yeniden başlatmadan sorumlu bir wrapper.js dosyası kullanır. Bu, düğüm betiğini bir çocuk işlem olarak başlatır. Yürütülebilir yolu yapılandırmak da mümkündür (yani düğüm yerine jx). Yani teorik olarak bunu muhtemelen yapabilirsiniz, ancak potansiyel olarak ne tür tuhaflıklarla karşılaşabileceğiniz konusunda hiçbir fikrim yok.
Corey

@Corey Basit bir Http Node uygulamam var ancak bu hizmeti kullanarak çalışmaya devam edemiyor gibi görünüyor. İyi kurulur ve başlar, ancak hemen durur. Herhangi bir yardım çok takdir edilecektir efendim! Olay görüntüleyici hata göstermez, ancak bir uyarı gösterir: Alt süreç [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] 0 ile sonlandırıldı
Mechkov

@Mechkov - 0 ile sonlandırma başarılı bir çıkış anlamına gelir. Komut dosyasını düğüm pencereleri olmadan başarıyla çalıştırabilir misiniz?
Corey

40

Bu şeyi o kadar kullanışlı buldum ki etrafına kullanımı daha da kolay bir sarmalayıcı ( npm , github ) yaptım .

Kurmak:

npm install -g qckwinsvc

Hizmetinizi yükleme:

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

Hizmetinizin kaldırılması:

qckwinsvc --uninstall

prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled

Teşekkürler, çok kolay !! quarky, benim için çalışıyor (10 64 bit kazanın)
Furkan

“Npm ERR! asyncWrite bir işlev değildir ”“ npm ERR! pna.nextTick bir işlev değil ”
Timwi

Teşekkürler, kullanımı çok kolay.
Enrique Flores

27

WinSer , popüler NSSM (Emici Olmayan Servis Yöneticisi) etrafında node.js dostu bir sarmalayıcıdır


NSSM'yi sevmez, çünkü barındırılan uygulama çökmesini yönettiği için Emici Değil olduğunu varsayar, yani aslında barındırılan uygulama emicidir. Sırf Microsoft olduğu için Microsoft'u genel olarak suçlamaktan hoşlanmayın.
Felice Pollano

2
@FelicePollano NSSM, sarılmış süreç ölse bile servisi çalışır durumda bırakan srvany gibi diğer çözümlerin aksine, barındırılan uygulamayı izlediği için Emici Değil olduğunu varsayar.
Jürgen Steinblock

@ JürgenSteinblock tam olarak söylediğim şey: barındırılan uygulama emiyor, hizmet yöneticisinin kendisi değil
Felice Pollano

2
@FelicePollano barındırılan bir uygulama çıkışı, kötü bir şey anlamına gelmez. Mesele şudur: NSSM, gerçek hizmet durumunu yansıtır (veya uygun şekilde yapılandırılmışsa yansıtabilir), böylece yalnızca diğer hizmet yöneticileri gibi çalışan bir durumu varsaymak yerine hizmet izlenebilir (bir kullanıcı olarak barındırılan işlemi öldürebilirim ve srvary hala gösterecektir) hizmet çalışır durumda).
Jürgen Steinblock

16

Bu blogdan

Daha sonra, IIS gibi düğümü bir hizmet olarak barındırmak istedim. Bu şekilde, makinemle başlar, arka planda çalışır, çökerse otomatik olarak yeniden başlar vb.

Emici olmayan servis yöneticisi nssm , burada devreye giriyor. Bu araç, normal bir .exe dosyasını Windows hizmeti olarak barındırmanıza izin verir.

Düğüm uygulamanızın bir örneğini hizmet olarak kurmak için kullandığım komutlar, yönetici gibi cmd'nizi açın ve aşağıdaki komutları yazın:

nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js
net start service_name

14

Soruyu doğrudan ele almıyorum, ancak gereksinimlerinizi daha node.js tarzında karşılayabilecek bir alternatif sunuyorum.

İşlevsel olarak gereksinimler şunlardır:

  1. Mantığın (uygulamanın) arka planda çalışmasını sağlayın
  2. Mantığı başlatabilir / durdurabilir
  3. Sistem başlatıldığında mantığı otomatik olarak başlat

Bu gereksinimler, bir süreç yöneticisi (PM) kullanılarak ve süreç yöneticisinin sistem başlangıcında başlatılmasıyla karşılanabilir. Windows dostu olan iki iyi PM:

PM'nin otomatik olarak başlamasını sağlamak için en basit yol, "Başlangıçta" tetikleyicisiyle zamanlanmış bir görev oluşturmaktır:

görüntü açıklamasını buraya girin


Başlangıçta pm2bir toplu komut dosyası kullanmaya çalışırsanız , ortam değişkenlerini eklediğinizden emin olun, aksi takdirde işe yaramayacaktır. Burada tartışıldı: github.com/Unitech/pm2/issues/1079
steampowered

@steampowered PM2_Home yolunu nasıl veriyor?
charan tej

0

Süreç yöneticisi + görev zamanlayıcı yaklaşımı Bir yıl önce bazı one-off hizmet kurulumları ile iyi çalışır yayınlanmıştır. Ancak son zamanlarda mikro hizmet tarzında sistem tasarlamaya başladım, birçok küçük hizmet IPC aracılığıyla birbirleriyle konuşuyor. Bu nedenle, her bir hizmeti manuel olarak yapılandırmak dayanılmaz hale geldi.

Servisleri manuel konfigürasyon olmadan kurma amacına doğru, bir çalıştırılabilir dosyayı servis olarak kurmak için bir komut satırı aracı olan (ile yükle ) serman'ı yarattım npm i -g serman. Tek yapmanız gereken (ve yalnızca bir kez yazmak), çalıştırılabilir dosyanızla birlikte basit bir servis yapılandırma dosyasıdır. Çalıştırmak

serman install <path_to_config_file>

hizmeti yükleyecektir. stdoutve stderrhepsi günlüğe kaydedilir. Daha fazla bilgi için proje web sitesine bakın .

Aşağıda gösterildiği gibi, çalışan bir yapılandırma dosyası çok basittir. Ama aynı zamanda <env>ve <persistent_env>altı gibi birçok kullanışlı özelliğe de sahiptir .

<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>
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.