如何安装 node.js 作为 Windows 服务?

我已经下载了 Node Js可执行文件。我如何运行该可执行文件作为窗口服务? 我不能使用标准的 node.js 安装程序,因为我需要同时运行多个版本的 node.js。

194588 次浏览

WinSer 是一个对 node.js 友好的包装器,围绕流行的 NSSM (Non-Suck Service Manager)

派对迟到了,但是 Node-windows也会成功的。

enter image description here

它还内置了系统日志。

enter image description here

有一个 API 用于从代码创建脚本,即。

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: 我是这个模块的作者。

我并没有直接解决这个问题,而是提供了一个可能以更加 node.js 的方式满足您需求的替代方案。

职能上的要求是:

  1. 在后台运行逻辑(应用程序)
  2. 能够启动/停止逻辑
  3. 系统启动时自动启动逻辑

可以通过使用流程管理器(PM)并使流程管理器在系统启动时启动来满足这些要求。两个 Windows 友好的好 PM 是:

要使 PM 自动启动,最简单的方法是创建一个带有“ At Startup”触发器的预定任务:

enter image description here

我发现这个东西非常有用,所以我在它周围构建了一个更容易使用的包装器(NpmGithub)。

安装:

npm install -g 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

卸载你的服务:

Qckwinsvc ——卸载

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

我一年前发布的 进程管理器 + 任务调度器方法与一些一次性服务安装工作得很好。但是最近我开始以微服务的方式设计系统,许多小型服务通过 IPC 相互通信。因此,手动配置每个服务已经变得难以忍受。

为了实现无需手动配置即可安装服务的目标,我创建了 Serman,这是一个命令行工具(使用 npm i -g serman安装) ,用于将可执行文件作为服务安装。您所需要编写(并且只编写一次)的是一个简单的服务配置文件和可执行文件。快跑

serman install <path_to_config_file>

将安装该服务。 stdoutstderr都被记录。更多信息,请看看 工程项目网站

工作配置文件非常简单,如下所示。但它也有许多有用的功能,如 <env><persistent_env>下面。

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

来自这个博客

接下来,我希望将节点作为服务托管,就像 IIS 一样 它会启动我的机器,在后台运行,然后重启 如果它崩溃了等等。

这就是非吮吸式服务管理器 国家安全局进入 这个工具可以让你托管一个普通的.exe 作为一个 Windows 服务。

下面是我用来设置节点实例的命令 应用程序作为一个服务,打开你的 cmd 像管理员和类型 以下命令:

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

Https://nssm.cc/ 服务助手以批处理方式创建视窗服务 我使用从 nssm 和良好的工作为任何应用程序和任何文件

因为 快点已经有一段时间没有更新了,所以有一个新的版本叫做 Qckwinsvc2(NpmGithub)

它现在支持传递给服务的参数。它还保留了一个本地缓存,这样您就不必每次执行操作时都提供一个路径

使用 现在参数可以在安装服务后立即启动该服务

qckwinsvc2 install name="Hello" description="Hello World" path="C:\index.js" args="--y" now
qckwinsvc2 uninstall name="Hello"
qckwinsvc2 list