在带有子进程的Windows中将NodeJS作为服务运行

时间:2014-01-21 03:43:03

标签: node.js windows-services

我在Windows上运行了两个NodeJS服务器,一个侦听传入的请求,然后对请求进行整形,然后将请求交给工作服务器。工作服务器将从控制器获取输入并执行多个功能:使用DB记录事件,shell out以通过子进程执行操作,评估结果并最终将结果返回给控制器。

当我通过Powershell或cmd运行这两个进程时,一切运行正常。如果我将Controller作为NSSM服务和Powershell上的Worker运行一切正常。但是,如果我将作为服务的工作服务器与NSSM一起运行,则子进程失败(console.logs或使用类似bunyon的东西似乎被吞没,因此调试很困难)。如果需要执行子进程,有没有办法将NodeJS作为服务器运行?

1 个答案:

答案 0 :(得分:0)

如果我理解正确,您可以尝试使用

重定向工作人员的stdoutstderr信息流
var fs = require('fs'),
     spawn = require('child_process').spawn,
     out = fs.openSync('./out.log', 'a'),
     err = fs.openSync('./out.log', 'a');

 var child = spawn('prg', [], {
   detached: true,
   stdio: [ 'ignore', out, err ]
 });

 child.unref();

这种方式在产生时,我们给工作进程一个fd来将输出写入文件。