2013-07-14 14 views
14

Tôi đã tạo một máy chủ http đơn giản trong Node.js.máy chủ http node.js http dưới dạng dịch vụ Windows

Tôi muốn làm cho nó chạy vĩnh viễn trên máy tính Windows 2008 của tôi, do đó, nếu máy tính khởi động lại, nó sẽ tự động khởi động lại.

Vì vậy, tôi đã làm cho nó một dịch vụ bằng lệnh này:

C:\Users\Administrator>sc create translate binPath= "node D:\Apps\translate\machine-learning-server\servertranslate.js" DisplayName= "Translation Server" 

Sau đó bắt đầu nó với:

C:\Users\Administrator>sc start translate 

và nhận được thông báo lỗi sau:

[SC] StartService FAILED 1053: 

The service did not respond to the start or control request in a timely fashion. 

Các công trình chương trình OK khi tôi bắt đầu nó từ dòng lệnh (không phải là một dịch vụ).

Cách dễ nhất để có máy chủ web node.js tự động khởi động lại khi máy tính khởi động lại là gì?

Trả lời

5

Khi tôi nhớ lại, môi trường thời gian chạy dịch vụ không giống như chạy một cái gì đó trong trình bao lệnh. Đặc biệt, dịch vụ được yêu cầu phải trả lời tin nhắn từ hệ thống để hiển thị trạng thái hoạt động của họ, như bạn đã thấy :-)

Đây phải là một vấn đề được giải quyết, mặc dù ...

đủ chắc: https://npmjs.org/package/windows-service

cửa sổ dịch vụ

chương trình Run Node.js như dịch vụ windows bản địa.

NPM cài đặt cửa sổ dịch vụ

+0

OK, nhưng những gì nếu tôi muốn chạy chương trình tương tự , cả từ dòng lệnh và dịch vụ Windows - tôi có cần hai phiên bản của cùng một chương trình không? –

+0

Đọc tài liệu về dịch vụ cửa sổ - bạn có thể triển khai các công tắc dòng lệnh cho chương trình tự cài đặt như một dịch vụ (hoặc không). –

16

Trong quá khứ, tôi đã sử dụng NSSM để chạy các ứng dụng Node.js như các dịch vụ trên Windows. Nó hoạt động khá tốt và có thể được cấu hình để tự động khởi động lại ứng dụng của bạn trong trường hợp có sự cố.

http://nssm.cc/usage

nssm install YourService "C:\Program Files\Node.js\node.exe" "C:\something\something.js" 
+2

Tôi đặt một bản sao của 'node.exe' trong thư mục ứng dụng, nếu không tôi đã có một số vấn đề đường dẫn với' nssm'. – Motti

+0

@Motti Không có vấn đề như vậy ở đây. Kiểm tra quyền của bạn. – Brad

+1

Nếu bạn chỉ cần 'nssm cài đặt YourService' thì một gui sẽ mở ra với tất cả các tùy chọn. Nó có 1 trường cho thực thi và 1 trường cho thư mục làm việc. đó có lẽ là vấn đề của Motti. Ngoài ra, một lưu ý, nssm có một tùy chọn để khởi động lại nút nếu nó dừng đột ngột. – Alpine

1

Tại một đoán, tôi muốn nói rằng dịch vụ không biết nơi nào để tìm ra nhị phân nút. Bạn có thể đã cập nhật biến PATH của tiểu sử của bạn. Khuyến nghị của tôi là luôn luôn mã hóa đường dẫn đầy đủ trong các kịch bản dịch vụ.

+4

Tôi phải categorically không đồng ý với ý tưởng rằng bạn nên "cứng mã đường dẫn đầy đủ" của bất cứ điều gì, _ever_. – AJMansfield

2

Như đã đề cập trong các câu hỏi khác, tôi muốn chia sẻ ở đây (vì nó chưa được nhắc đến) mô-đun node.js gọi là WinSer kết thúc tốt đẹp NSSM và việc sử dụng nó rất đơn giản, có thể giúp ai đó một ngày nào đó .

:)

2

Sử dụng thế này, thực sự đơn giản https://github.com/coreybutler/node-windows

Tạo nộp hai js vào dự án của bạn. Và chạy chúng như

node your_service.js node your_service_remove.js

Đối với cài đặt:

/** 
* Created by sabbir on 08/18/2015. 
*/ 
//ref: https://github.com/coreybutler/node-windows 
var Service = require('node-windows').Service; 

// Create a new service object 
var svc = new Service({ 
    name:'nodeDemoApp', 
    description: 'The nodejs.org example web server.', 
    script: 'D:\\NodeJS\\demoWeb\\bin\\www' 
}); 

// Listen for the "install" event, which indicates the 
// process is available as a service. 
svc.on('install',function(){ 
    svc.start(); 
}); 

svc.install(); 

Đối gỡ bỏ cài đặt:

var Service = require('node-windows').Service; 

// Create a new service object 
var svc = new Service({ 
    name:'nodeDemoApp', 
    script: require('path').join(__dirname,'bin\\www') 
}); 

// Listen for the "uninstall" event so we know when it's done. 
svc.on('uninstall',function(){ 
    console.log('Uninstall complete.'); 
    console.log('The service exists: ',svc.exists); 
}); 

// Uninstall the service. 
svc.uninstall(); 
+0

Nhận được lỗi dưới đây khi chạy ứng dụng bằng cách sử dụng các nút-cửa sổ. ENOENT: không có tệp hoặc thư mục như vậy, mở 'C: \ Windows \ system32 \ views \ login \ index.jade' –

+0

không chắc chắn lý do tại sao thư mục system32 thay vì thư mục ứng dụng của tôi –

+0

@ jiterndra-pancholi bạn có thể dán như thế nào mẫu JADE của bạn được cấu hình để dự án? – Sabbir

0

Bạn có thể thử các gói qckwinsvc. Đầu tiên cài đặt nó trên toàn cầu:

npm install -g qckwinsvc

Và sau đó từ cmd:

qckwinsvc 
prompt: Service name: [...] 
prompt: Service description: [...] 
prompt: Node script path: [/path/to/.js file] 

Để gỡ bỏ cài đặt:

qckwinsvc --uninstall