如何将node.js安装为windows服务?

如何将node.js安装为windows服务?,node.js,windows-services,Node.js,Windows Services,我已经下载了可执行文件。如何将该可执行文件作为windows服务运行? 我不能使用标准的node.js安装程序,因为我需要同时运行多个版本的node.js。是一个node.js友好的包装器,它围绕着流行的进行包装,但也可以做到这一点 它还内置了系统日志 有一个API可以从代码创建脚本,即 var Service = require('node-windows').Service; // Create a new service object var svc = new Service({

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

是一个node.js友好的包装器,它围绕着流行的进行包装,但也可以做到这一点

它还内置了系统日志

有一个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的方式满足您的需求

从功能上讲,这些要求是:

  • 让逻辑(应用程序)在后台运行
  • 能够启动/停止逻辑
  • 系统启动时自动启动逻辑
  • 通过使用流程管理器(PM)并在系统启动时启动流程管理器,可以满足这些要求。Windows友好的两个好PM是:

    要使PM自动启动,最简单的方法是使用“启动时”触发器创建计划任务:


    我发现这个东西非常有用,因此我在它周围构建了一个更易于使用的包装器(,)

    安装它:

    npm install -g qckwinsvc
    
    安装您的服务:

    qckwinsvc

    卸载您的服务:

    qckwinsvc--卸载

    我一年前发布的应用程序在一些一次性服务安装中运行良好。但最近我开始以微服务的方式设计系统,许多小服务通过IPC相互通信。因此,手动配置每个服务已变得难以忍受

    为了在不进行手动配置的情况下安装服务,我创建了一个命令行工具(使用npmi-gserman安装)来将可执行文件作为服务安装。您只需编写(并且只需编写一次)一个简单的服务配置文件以及可执行文件。跑

    serman install <path_to_config_file>
    

    接下来,我想将节点作为服务托管,就像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
    
    service helper适用于通过批处理文件创建windows服务
    我从nssm使用&good working for any app&any file

    ,因为qckwinsvc已经有一段时间没有更新了,有一个新版本叫做qckwinsvc2(,)

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

    立即使用参数在安装后立即启动服务

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

    其次是“太棒了”。我只是按照你的自述说明做的,而且它是开箱即用的——非常罕见!您可能想在自述文件中添加一件事:如何在CLI:i.e.>node set_up_win_service.js上运行创建的js脚本…@Corey使用此模块是否可以将包作为服务运行?@Madhur-理论上,它可能会工作,但我没有也不打算测试它。节点windows使用负责监视/重新启动的wrapper.js文件。不过,这只是将节点脚本作为子进程启动。还可以配置可执行路径(即jx而不是节点)。所以,从理论上讲,你可能会这样做,但我不知道你可能会遇到什么样的怪癖。@Corey我有一个简单的Http节点应用程序,但它似乎无法使用此服务继续运行。它安装和启动良好,但立即停止。先生,任何帮助都将不胜感激!事件查看器不会显示任何错误,但会显示一条警告:子进程[50732-C:\Program Files\nodejs\node.exe--harmony“C:\Users\bmechkov\AppData\Roaming\npm\node\u modules\node windows\lib\wrapper.js”-f“C:\dev\node\abs\u tips\server.js”-“node abs tips”--g 0.25-w 1-r 3-a n]终止于0@Mechkov-以0终止表示成功退出。在没有节点窗口的情况下能否成功运行脚本?如果尝试在启动时使用批处理脚本启动
    pm2
    ,请确保包含环境变量,否则将无法运行。此处讨论:@steampowered如何给出PM2_主路径?不喜欢NSSM,因为它认为它不吸引人,因为它处理托管应用程序崩溃,所以实际上是托管应用程序吸引人。不要因为微软是微软就指责微软。@FelicePollano NSSM认为它不令人讨厌,因为它监视托管的应用程序,而其他解决方案(如srvany)则让服务处于运行状态,即使包装好的进程死了。@JürgenSteinblock这正是我所说的:托管的应用程序糟糕透了,不是服务管理器吗itself@FelicePollano托管的应用程序退出并不意味着什么坏事。关键是:NSSM反映(或者如果配置正确,可以反映)真实的服务状态,因此可以监视服务,而不是像其他服务管理器一样假设服务处于运行状态(作为一个用户,我不能终止托管进程,而srvary仍会显示处于运行状态的服务)。根据我的经验,没有任何东西可以接近NSSM,只需使用
    nssm install
    命令即可处理节点、Python、Java(jar)、PHP和PowerShell脚本。通过Chocolate
    choco安装nssm
    安装它,忘记所有windows服务的怪癖。谢谢,非常简单!!quarky,它适用于我(win 10 64位)“npm ERR!asyncWrite不是函数”“npm ERR!pna.nextTick不是函数”qckwinsvc不再维护。有一个新版本qckwinsvc2(npm i qckwinsvc2-g)
    <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>
    
    nssm.exe install service_name c:\your_nodejs_directory\node.exe c:\your_application_directory\server.js
    net start service_name
    
    qckwinsvc2 install name="Hello" description="Hello World" path="C:\index.js" args="--y" now
    
    qckwinsvc2 uninstall name="Hello"
    
    qckwinsvc2 list