Yanıtlar:
Partiye geç kaldı, ancak düğüm pencereleri de işe yarayacak.
Ayrıca yerleşik sistem günlüğü vardır.
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.
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
WinSer , popüler NSSM (Emici Olmayan Servis Yöneticisi) etrafında node.js dostu bir sarmalayıcıdır
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
Soruyu doğrudan ele almıyorum, ancak gereksinimlerinizi daha node.js tarzında karşılayabilecek bir alternatif sunuyorum.
İşlevsel olarak gereksinimler şunlardır:
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:
pm2
bir 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
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. stdout
ve stderr
hepsi 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>