2013-07-14 527 views
14

我在Node.js中創建了一個簡單的http服務器。node.js http服務器作爲Windows服務

我想讓它在我的Windows 2008計算機上永久運行,這樣,如果計算機重新啓動,它會自動重新啓動。

所以我做了這個命令服務:

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

然後開始吧:

C:\Users\Administrator>sc start translate 

,並得到了以下錯誤消息:

[SC] StartService FAILED 1053: 

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

該項目工程好的,當我從命令行(而不是服務)啓動它時。

讓計算機重新啓動時自動重新啓動node.js Web服務器的最簡單方法是什麼?

回答

5

我記得,服務運行時環境與在命令shell下運行某些東西不一樣。特別是,服務需要從系統回覆短信表明自己的運行狀態,如您所見:-)

這必須是一個解決問題,但...

果然: https://npmjs.org/package/windows-service

窗口服務

運行Node.js的方案,作爲本機Windows服務。

NPM安裝Windows的服務

+0

OK,但如果我想運行同一程序,無論是從命令行還是Windows服務 - 我是否需要同一個程序的兩個版本? –

+0

閱讀windows-service的文檔 - 你可以實現命令行開關,告訴程序將自己安裝爲服務(或不)。 –

16

在過去,我已經使用NSSM運行的Node.js應用程序作爲Windows服務。它工作得很好,可以配置爲在發生崩潰時自動重啓應用程序。

http://nssm.cc/usage

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

我在app目錄中放了一個'node.exe'的副本,否則''nssm'有一些路徑問題。 – Motti

+0

@Motti在這裏沒有問題。檢查您的權限。 – Brad

+1

如果你只是'nssm install YourService',那麼gui將會打開所有的選項。它有1個可執行字段和1個工作目錄字段。這可能是Motti的問題。另外,注意,如果nssm意外停止,它可以選擇重新啓動節點。 – Alpine

1

在猜測,我會說,該服務不知道在哪裏可以找到節點二叉樹。您可能已更新您的個人資料的PATH變量。我的建議是總是硬編碼服務腳本的完整路徑。

+4

我必須斷然不同意你應該「硬編碼完整路徑」的任何事情,_ever_。 – AJMansfield

2

正如其他人提到的問題一樣,我想在此分享一個名爲WinSer的node.js模塊,它包裝了NSSM,它的使用非常簡單,也許它有助於某人某一天。

:)

2

使用這一個,很簡單 https://github.com/coreybutler/node-windows

創建兩個JS在你的項目文件。並運行這些作爲

節點your_service.js 節點your_service_remove。JS

對於安裝:

/** 
* 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(); 

對於卸載:

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

使用節點窗口運行應用程序時出現以下錯誤。 ENOENT:沒有這樣的文件或目錄,打開「C:\ WINDOWS \ SYSTEM32 \意見\登錄\ index.jade」 –

+0

不知道爲什麼它尋找到system32文件夾下,而不是我的應用程序文件夾 –

+0

的@ jiterndra-pancholi你能粘貼如何您的JADE模板配置爲項目? – Sabbir

0

你可以嘗試包qckwinsvc。全球第一安裝:

npm install -g qckwinsvc

再從CMD:

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

卸載:

qckwinsvc --uninstall