使用NSSM将NodeJs进程作为Windows服务启动无法正常工作

13

我看过无数关于如何使用NSSM (http://nssm.cc/) 启动NodeJS进程的文章。

那么,我有以下简单的NodeJS文件:

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, { 'Content-Type': 'text/html' });
    res.end('<p>Hello World</p>');
}).listen(8000);

console.log('Server running on http://localhost:8000/');

我正在使用以下命令将NodeJS文件安装为Windows服务:

"C:\Program Files\SimpleNode\nssm.exe" install SimpleNode "C:\Program Files\SimpleNode\node.exe" "C:\Program Files\SimpleNode\simple.js"

服务已安装。当我启动它时,出现错误消息,服务处于暂停状态,并且在事件查看器中看到以下错误:

GetProcessTimes() failed: The handle is invalid.

这应该很简单。我已尝试使用具有本地管理员权限的域帐户。我尝试了几个不同的端口号。当我从命令行启动应用程序时,它确实可以正常工作。

更多备注: 这在64位Windows 2008 R2服务器上运行。我确保我运行了NSSM和Node的所有64位可执行文件。我还尝试过使用32位可执行文件。

有人能告诉我我漏掉了什么吗?有其他人可以复制此问题吗?

3个回答

16

找到了问题。

问题在于simple.js文件的路径中有一个空格(Good Old "Program Files")。你必须用反斜杠转义引号,以便NSSM可以正确解释它。正确的安装命令行是:

"C:\Program Files\SimpleNode\nssm.exe" install SimpleNode "C:\Program Files\SimpleNode\node.exe" \"C:\Program Files\SimpleNode\simple.js\"


0
听起来你由于某种原因无法访问端口。尝试将服务设置为管理员身份运行(在Windows Server 2008上,打开服务器管理器>服务>服务名称),看看会发生什么。

不,我已经尝试过了。我将编辑我的问题,并列出一些我尝试过的事情。 - Rob Cannon
很奇怪,当我遇到类似的问题(Windows Server 2008)时,这个方法起作用了。 - legacy

-2

AlwaysOn让我使用32位版本的Node.exe。这个版本可以与AlwaysOn兼容。我确保我同时拥有NSSM和Node的32位版本,但仍然遇到了同样的问题。 - Rob Cannon

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接