Làm cách nào để cài đặt node.js làm dịch vụ windows?


130

Tôi đã tải xuống tệp thực thi node.js. Làm thế nào tôi có thể chạy mà thực thi như dịch vụ windows? Tôi không thể sử dụng trình cài đặt node.js tiêu chuẩn, vì tôi cần chạy đồng thời nhiều phiên bản của node.js.

Câu trả lời:


187

Đến bữa tiệc muộn, nhưng các nút-windows cũng sẽ thực hiện thủ thuật này.

nhập mô tả hình ảnh ở đây

Nó cũng có hệ thống đăng nhập được xây dựng trong.

nhập mô tả hình ảnh ở đây

Có một API để tạo tập lệnh từ mã, tức là

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: Tôi là tác giả của mô-đun này.


3
thứ hai "tuyệt vời". Tôi chỉ làm theo hướng dẫn readme của bạn và nó hoạt động ngay lập tức - rất hiếm! chỉ một điều bạn có thể muốn thêm vào readme: cách chạy tập lệnh js đã tạo tại CLI: tức là> nút set_up_win_service.js ...
mike gặm nhấm

@Corey có cách nào để tôi có thể chạy gói JXCore như một dịch vụ sử dụng mô-đun này không?
Madhur

@Madhur - Về mặt lý thuyết, nó có thể hoạt động, nhưng tôi chưa và không có kế hoạch kiểm tra nó. nút-windows sử dụng tệp Wrapper.js chịu trách nhiệm theo dõi / khởi động lại. Điều này chỉ khởi chạy tập lệnh nút như là một tiến trình con. Cũng có thể định cấu hình đường dẫn thực thi (ví dụ jx thay vì nút). Vì vậy, về mặt lý thuyết, bạn có thể có thể làm điều này, nhưng tôi không biết bạn có thể gặp phải loại quirks nào.
Corey

@Corey Tôi có một ứng dụng http Node đơn giản nhưng dường như không thể chạy bằng dịch vụ này. Nó cài đặt và bắt đầu tốt, nhưng nó dừng ngay lập tức. Bất kỳ trợ giúp sẽ được đánh giá rất cao thưa ông! Trình xem sự kiện không hiển thị lỗi, nhưng cảnh báo: Quá trình con [50732 - C: \ Chương trình tập tin \ 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] chấm dứt bằng 0
Mechkov

@Mechkov - Chấm dứt bằng 0 có nghĩa là thoát thành công. Bạn có thể chạy tập lệnh thành công mà không cần nút-windows không?
Corey

40

Tôi thấy điều này hữu ích đến nỗi tôi đã xây dựng một trình bao bọc thậm chí còn dễ sử dụng hơn xung quanh nó ( npm , github ).

Cài đặt nó:

npm install -g qckwinsvc

Cài đặt dịch vụ của bạn:

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

Gỡ cài đặt dịch vụ của bạn:

qckwinsvc - cài đặt

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

Cảm ơn, rất dễ !! quarky, nó hoạt động với tôi (thắng 10 64 bit)
Furkan

Npm ERR! asyncWrite không phải là một chức năng pna.nextTick không phải là một chức năng
Timwi

Cảm ơn bạn, điều này rất dễ sử dụng.
Enrique Flores

27

WinSer là một trình bao bọc thân thiện với node.js xung quanh NSSM (Trình quản lý dịch vụ không hút) phổ biến


không thích NSSM vì nó cho rằng nó không phải là Sucking vì nó xử lý sự cố ứng dụng được lưu trữ, vì vậy thực sự nó là ứng dụng được lưu trữ. Đừng nói chung là đổ lỗi cho Microsoft chỉ vì đó là Microsoft.
Felice Pollano

2
@FelicePollano NSSM giả định rằng đó không phải là Sucking vì nó giám sát ứng dụng được lưu trữ, ngược lại với các giải pháp khác như srvany khiến dịch vụ ở trạng thái hoạt động, ngay cả khi quy trình được gói bị chết.
Jürgen Steinblock

@ JürgenSteinblock đây chính xác là những gì tôi đã nói: là ứng dụng được lưu trữ, chứ không phải chính người quản lý dịch vụ
Felice Pollano

2
@FelicePollano một lối thoát ứng dụng được lưu trữ không nessecarry có nghĩa là một cái gì đó xấu. Vấn đề là: NSSM phản ánh (hoặc có thể phản ánh nếu được định cấu hình đúng) trạng thái dịch vụ thực để dịch vụ có thể được giám sát thay vì chỉ giả sử trạng thái chạy như các trình quản lý dịch vụ khác (vì người dùng tôi kann giết quy trình được lưu trữ và srvary vẫn hiển thị dịch vụ trong trạng thái hoạt động).
Jürgen Steinblock

16

Từ blog này

Tiếp theo, tôi muốn lưu trữ nút như một dịch vụ, giống như IIS. Bằng cách này, nó sẽ khởi động với máy của tôi, chạy trong nền, tự động khởi động lại nếu nó gặp sự cố.

Đây là nơi nssm , người quản lý dịch vụ không hút, nhập vào hình ảnh. Công cụ này cho phép bạn lưu trữ một .exe bình thường như một dịch vụ Windows.

Dưới đây là các lệnh tôi đã sử dụng để thiết lập một phiên bản của ứng dụng nút của bạn dưới dạng dịch vụ, mở cmd của bạn như quản trị viên và nhập các lệnh sau:

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

14

Tôi không trực tiếp giải quyết câu hỏi, nhưng cung cấp một giải pháp thay thế cũng có thể đáp ứng yêu cầu của bạn theo cách thức thời trang hơn node.js.

Về mặt chức năng, các yêu cầu là:

  1. Có logic (ứng dụng) chạy trong nền
  2. Có thể bắt đầu / dừng logic
  3. Tự động khởi động logic khi hệ thống khởi động

Những yêu cầu này có thể được thỏa mãn bằng cách sử dụng trình quản lý quy trình (PM) và làm cho trình quản lý quy trình bắt đầu khởi động hệ thống. Hai PM tốt thân thiện với Windows là:

Để làm cho PM bắt đầu tự động, cách đơn giản nhất là tạo một tác vụ theo lịch trình với trình kích hoạt "Khi khởi động":

nhập mô tả hình ảnh ở đây


Nếu bạn cố gắng bắt đầu pm2sử dụng tập lệnh bó khi khởi động, hãy chắc chắn bao gồm các biến môi trường nếu không nó sẽ không hoạt động. Thảo luận ở đây: github.com/Unitech/pm2/issues/1079
steampowered

@steampowered làm thế nào cho đường dẫn PM2_Home?
charan tej

0

Trình quản lý quy trình + cách tiếp cận lập lịch tác vụ tôi đã đăng một năm trước hoạt động tốt với một số cài đặt dịch vụ một lần. Nhưng gần đây tôi bắt đầu thiết kế hệ thống theo kiểu dịch vụ vi mô, với nhiều dịch vụ nhỏ nói chuyện với nhau thông qua IPC. Vì vậy, cấu hình thủ công từng dịch vụ đã trở nên không thể chịu đựng được.

Hướng tới mục tiêu cài đặt dịch vụ mà không cần cấu hình thủ công, tôi đã tạo serman , một công cụ dòng lệnh (cài đặt với npm i -g serman) để cài đặt một tệp thực thi như một dịch vụ. Tất cả những gì bạn cần viết (và chỉ viết một lần) là một tệp cấu hình dịch vụ đơn giản cùng với tệp thực thi của bạn. Chạy

serman install <path_to_config_file>

sẽ cài đặt dịch vụ. stdoutstderrtất cả đều được ghi lại. Để biết thêm thông tin, hãy xem trang web của dự án .

Một tập tin cấu hình làm việc rất đơn giản, như thể hiện dưới đây. Nhưng nó cũng có nhiều tính năng hữu ích như <env><persistent_env>bên dưới.

<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>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.