Jawaban:
Terlambat ke pesta, tetapi simpul-windows akan melakukan trik juga.
Ini juga memiliki sistem masuk bawaan.
Ada API untuk membuat skrip dari kode, yaitu
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: Saya penulis modul ini.
Saya menemukan hal yang sangat berguna sehingga saya membangun pembungkus yang lebih mudah digunakan di sekitarnya ( npm , github ).
Menginstalnya:
npm install -g qckwinsvc
Menginstal layanan Anda:
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
Menghapus instalasi layanan Anda:
qckwinsvc --uninstall
prompt: Service name: [name of your service]
prompt: Node script path: [path of your node script]
Service stopped
Service uninstalled
WinSer adalah pembungkus node.js ramah di sekitar NSSM populer (Non-Sucking Service Manager)
Selanjutnya, saya ingin meng-host simpul sebagai layanan, sama seperti IIS. Dengan cara ini akan memulai dengan mesin saya, berjalan di latar belakang, restart secara otomatis jika crash dan sebagainya.
Di sinilah nssm , manajer layanan non-mengisap, memasuki gambar. Alat ini memungkinkan Anda meng-host .exe normal sebagai layanan Windows.
Berikut adalah perintah yang saya gunakan untuk mengatur instance aplikasi node Anda sebagai layanan, buka cmd like administrator Anda dan ketik perintah berikut:
nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js net start service_name
Saya tidak menjawab pertanyaan secara langsung, tetapi memberikan alternatif yang mungkin juga memenuhi kebutuhan Anda dengan cara yang lebih node.js.
Secara fungsional persyaratannya adalah:
Persyaratan ini dapat dipenuhi dengan menggunakan manajer proses (PM) dan membuat manajer proses mulai pada startup sistem. Dua PM bagus yang ramah-Windows adalah:
Untuk membuat PM mulai secara otomatis, cara paling sederhana adalah membuat tugas terjadwal dengan pemicu "Saat Mulai":
pm2
menggunakan skrip batch pada saat startup, pastikan untuk memasukkan variabel lingkungan atau tidak akan berfungsi. Dibahas di sini: github.com/Unitech/pm2/issues/1079
Pendekatan manajer proses + penjadwal tugas yang saya posting setahun lalu bekerja dengan baik dengan beberapa instalasi layanan satu kali. Namun baru-baru ini saya mulai mendesain sistem dengan cara layanan mikro, dengan banyak layanan kecil berbicara satu sama lain melalui IPC. Jadi secara manual mengkonfigurasi setiap layanan menjadi tak tertahankan.
Untuk mencapai tujuan menginstal layanan tanpa konfigurasi manual, saya membuat serman , alat baris perintah (install with npm i -g serman
) untuk menginstal yang dapat dieksekusi sebagai layanan. Yang Anda butuhkan untuk menulis (dan hanya menulis sekali) adalah file konfigurasi layanan sederhana bersama dengan executable Anda. Lari
serman install <path_to_config_file>
akan menginstal layanan. stdout
dan stderr
semuanya sudah login. Untuk info lebih lanjut, lihat situs web proyek .
File konfigurasi yang berfungsi sangat sederhana, seperti yang ditunjukkan di bawah ini. Tetapi juga memiliki banyak fitur berguna seperti <env>
dan di <persistent_env>
bawah ini.
<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>