Bagaimana cara menginstal node.js sebagai layanan windows?

130

Saya telah mengunduh executable node.js. Bagaimana saya bisa menjalankan itu sebagai layanan windows? Saya tidak dapat menggunakan installer node.js standar, karena saya harus menjalankan beberapa versi node.js secara bersamaan.

TN.
sumber

Jawaban:

187

Terlambat ke pesta, tetapi simpul-windows akan melakukan trik juga.

masukkan deskripsi gambar di sini

Ini juga memiliki sistem masuk bawaan.

masukkan deskripsi gambar di sini

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.

Corey
sumber
3
kedua yang "luar biasa". Saya baru saja mengikuti instruksi readme Anda dan langsung bekerja - sangat jarang! hanya satu hal yang mungkin ingin Anda tambahkan ke readme: bagaimana menjalankan skrip js yang dibuat di CLI: yaitu> node set_up_win_service.js ...
mike rodent
@Corey bagaimana saya bisa menjalankan paket JXCore sebagai layanan menggunakan modul ini?
Madhur
@ Madhur - Secara teoritis, ini mungkin berhasil, tapi saya belum dan tidak berencana untuk mengujinya. node-windows menggunakan file wrapper.js yang bertanggung jawab untuk memonitor / me-restart. Ini hanya meluncurkan skrip simpul sebagai proses anak. Juga dimungkinkan untuk mengkonfigurasi jalur yang dapat dieksekusi (mis. Jx alih-alih simpul). Jadi, secara teoritis, Anda mungkin bisa melakukan ini, tapi saya tidak tahu kebiasaan seperti apa yang berpotensi Anda temui.
Corey
@Corey Saya punya aplikasi Ntt Hode sederhana tetapi sepertinya tidak bisa tetap berjalan menggunakan layanan ini. Ini menginstal dan mulai baik-baik saja, tetapi berhenti dengan segera. Bantuan apa pun akan sangat dihargai, Pak! Penampil acara tidak menunjukkan kesalahan, tetapi peringatan: Proses anak [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" TIPS ABS NODE "-g 0,25 -w 1 -r 3 -an] diakhiri dengan 0
Mechkov
@Mechkov - Mengakhiri dengan 0 berarti keluar dengan sukses. Bisakah Anda menjalankan skrip dengan sukses tanpa node-windows?
Corey
40

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
Hariram Nandagopal
sumber
Terima kasih, sangat mudah !! quarky, ini bekerja untuk saya (menangkan 10 64 bit)
Furkan
“Npm ERR! asyncWrite bukan fungsi "" npm ERR! pna.nextTick bukan fungsi ”
Timwi
Terima kasih, ini sangat mudah digunakan.
Enrique Flores
27

WinSer adalah pembungkus node.js ramah di sekitar NSSM populer (Non-Sucking Service Manager)

Predrag Stojadinović
sumber
tidak suka NSSM karena menganggap itu Non-Mengisap karena menangani crash aplikasi yang di-host, jadi sebenarnya itu adalah mengisap aplikasi yang di-host. Tidak suka menyalahkan Microsoft secara umum hanya karena itu adalah Microsoft.
Felice Pollano
2
@FelicePollano NSSM menganggap itu Non-Mengisap karena memonitor aplikasi yang dihosting, berbeda dengan solusi lain seperti srvany yang meninggalkan layanan dalam keadaan berjalan, bahkan jika proses yang dibungkus mati.
Jürgen Steinblock
@ JürgenSteinblock ini persis seperti yang saya katakan: adalah penghisapan aplikasi yang dihosting, bukan manajer layanan itu sendiri
Felice Pollano
2
@FelicePollano aplikasi keluar yang di-host tidak berarti sesuatu yang buruk. Intinya adalah: NSSM mencerminkan (atau dapat mencerminkan jika dikonfigurasi dengan benar) status layanan nyata sehingga layanan dapat dipantau, bukan hanya dengan asumsi keadaan berjalan seperti manajer layanan lainnya (sebagai pengguna saya dapat mematikan proses yang di-host dan srvary masih akan menunjukkan layanan dalam keadaan berjalan).
Jürgen Steinblock
16

Dari blog ini

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
Michael Horojanski
sumber
14

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:

  1. Biarkan logika (aplikasi) berjalan di latar belakang
  2. Dapat memulai / menghentikan logika
  3. Secara otomatis memulai logika ketika sistem dinyalakan

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":

masukkan deskripsi gambar di sini

KFL
sumber
Jika Anda mencoba untuk mulai pm2menggunakan skrip batch pada saat startup, pastikan untuk memasukkan variabel lingkungan atau tidak akan berfungsi. Dibahas di sini: github.com/Unitech/pm2/issues/1079
steampowered
@steampowered bagaimana memberikan jalur PM2_Home?
charan tej
0

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. stdoutdan stderrsemuanya 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>
KFL
sumber