如何将node.js应用程序作为后台服务运行?

南楼画角 提交于 2020-02-27 02:25:17

多年来,由于这篇文章引起了很多关注,因此我在文章的底部列出了每个平台的最佳解决方案。


原始帖子

我希望我的node.js服务器在后台运行,即:当我关闭终端时,我希望服务器继续运行。 我已经用谷歌搜索并提出了本教程 ,但是它不能按预期工作。 因此,我没有使用该守护程序脚本,而是以为我只使用了输出重定向( 2>&1 >> file部分),但这也不会退出-我在终端中出现空白行,就像它在等待输出/错误一样。

我也尝试过将流程置于后台,但是一旦关闭终端,该流程也会被终止。

那么,当我关闭本地计算机时如何使它运行?


最佳解决方案


#1楼

对于这个聚会来说,这个答案很晚了,但是我发现最好的解决方案是编写同时使用screen -dmSnohup命令的shell脚本。

screen -dmS newScreenName nohup node myserver.js >> logfile.log

我还将在末尾添加>> logfile位,以便可以轻松保存节点console.log()语句。

为什么要使用Shell脚本? 好吧,我还添加了一条if语句,用于检查node myserver.js进程是否已在运行。

这样,我能够创建一个命令行选项,该选项既可以使服务器保持运行状态,又可以在进行更改后重新启动服务器,这对开发非常有帮助。


#2楼

我只是在使用守护程序 npm模块:

var daemon = require('daemon');

daemon.daemonize({
    stdout: './log.log'
  , stderr: './log.error.log'
  }
, './node.pid'
, function (err, pid) {
  if (err) {
    console.log('Error starting daemon: \n', err);
    return process.exit(-1);
  }
  console.log('Daemonized successfully with pid: ' + pid);

  // Your Application Code goes here
});

最近,我还使用TJ Holowaychuk的 mon(1)来启动和管理简单的节点应用程序。


#3楼

Node.js作为WINDOWS XP中的后台服务

安装:

  1. 通过安装程序可执行文件安装WGET http://gnuwin32.sourceforge.net/packages/wget.htm
  2. 通过安装程序可执行文件安装GIT http://code.google.com/p/msysgit/downloads/list
  3. 通过将nnsm.exe复制到%windir%/ system32文件夹来安装NSSM http://nssm.cc/download/?page=download
  4. 创建c:\\ node \\ helloworld.js

    // http://howtonode.org/hello-node var http = require('http'); var server = http.createServer(function (request, response) { response.writeHead(200, {"Content-Type": "text/plain"}); response.end("Hello World\\n"); }); server.listen(8000); console.log("Server running at http://127.0.0.1:8000/");
  5. 打开命令控制台并键入以下内容(仅在安装了Resource Kit的情况下才为setx)

    C:\\node> set path=%PATH%;%CD% C:\\node> setx path "%PATH%" C:\\node> set NODE_PATH="C:\\Program Files\\nodejs\\node_modules" C:\\node> git config --system http.sslcainfo /bin/curl-ca-bundle.crt C:\\node> git clone --recursive git://github.com/isaacs/npm.git C:\\node> cd npm C:\\node\\npm> node cli.js install npm -gf C:\\node> cd .. C:\\node> nssm.exe install node-helloworld "C:\\Program Files\\nodejs\\node.exe" c:\\node\\helloworld.js C:\\node> net start node-helloworld
  6. 一个不错的批处理好事是创建c:\\ node \\ ServiceMe.cmd

    @echo off nssm.exe install node-%~n1 "C:\\Program Files\\nodejs\\node.exe" %~s1 net start node-%~n1 pause

服务管理:

  • 现在可以通过开始->运行-> services.msc或通过开始->运行-> MSCONFIG->服务(并选中“隐藏所有Microsoft服务”)来访问服务本身。
  • 该脚本会将通过批处理脚本创建的每个节点添加为“ node-”前缀。
  • 同样,可以在注册表中找到它们:“ HKLM \\ SYSTEM \\ CurrentControlSet \\ Services \\ node-xxxx

#4楼

2016更新: node-windows / mac / linux系列在所有操作系统上使用通用的API,因此绝对是一个相关的解决方案。 然而; node-linux生成systemv初始化文件。 随着systemd的持续普及,在Linux上实际上是一个更好的选择。 如果有人想向node-linux添加systemd支持,则PR表示欢迎:-)

原始线程:

现在这是一个相当老的线程,但是节点窗口提供了另一种在Windows上创建后台服务的方法。 它大致基于nssm概念,即在节点脚本周围使用exe包装器。 然而; 它改用winsw.exe并提供可配置的节点包装程序,以更精细地控制故障发生时进程的启动/停止。 这些过程与其他服务一样可用:

该模块还包含一些事件日志记录:

守护脚本是通过代码完成的。 例如:

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\\my\\node\\script.js'
});

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

// Listen for the "start" event and let us know when the
// process has actually started working.
svc.on('start',function(){
  console.log(svc.name+' started!\nVisit http://127.0.0.1:3000 to see it in action.');
});

// Install the script as a service.
svc.install();

该模块支持诸如限制重新启动的上限(这样,错误的脚本不会使您的服务器瘫痪)以及重新启动之间的时间间隔越来越长。

由于节点Windows服务的运行方式与其他服务一样,因此可以使用您已经使用的任何软件来管理/监视该服务。

最后,没有make依赖项。 换句话说,一个简单的npm install -g node-windows就可以了。 您不需要安装Visual Studio,.NET或node-gyp魔术。 此外,它还获得了MIT和BSD的许可。

我完全是本模块的作者。 它旨在减轻OP所遭受的确切痛苦,但与操作系统已提供的功能之间的紧密集成。 我希望将来有同样问题的观众也能从中受益。


#5楼

为了完善建议的各种选项,这里还有一个:GNU / Linux中的daemon命令,您可以在这里阅读: http : //libslack.org/daemon/manpages/daemon.1.html 。 (如果在上面的评论之一中已经提到过,则表示歉意)。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!