启动node.js app作为后台进程

时间:2013-05-25 22:30:58

标签: node.js daemon forever

我有一个node.js应用程序,它运行直到用户退出进程。我正在尝试使用forever作为后台进程运行此应用,但是,我的应用最初输出了一些内容到stdout:

process.stdout.clearLine();
process.stdout.cursorTo(0);
process.stdout.write('...');

如果我永远运行这个应用程序

forever start -l forever.log -o out.log -e err.log app.js

它确实在后台运行,但out.log文件中没有任何内容。如果我查看err.log,我发现问题在于将内容打印到stdout

$ cat err.log 

/Users/err/Sites/js/test/app.js:105
    process.stdout.clearLine();
                   ^
TypeError: Object #<Socket> has no method 'clearLine'
    at null.<anonymous> (/Users/err/Sites/js/test/app.js:105:20)
    at wrapper [as _onTimeout] (timers.js:252:14)
    at Timer.listOnTimeout [as ontimeout] (timers.js:110:15)

我还尝试使用forever-monitor并写了一个小脚本:

var config = require('./config');

if (config.runInBackground) {
  var forever = require('forever-monitor');
  var child = new (forever.Monitor)('app.js', {
    max: 1,
    silent: true,
    outFile: 'monitor.out.log',
    errFile: 'monitor.err.log'
  });
  child.on('stdout', function(e) {
    console.log(e);
  });
  child.on('exit', function () {
    console.log('exited.');
  });
  child.start();
} else {
  // do the regular process.stdout.write('...');
}

但我的脚本存在而没有编写任何文件或启动后台进程。

如何在后台运行我的节点应用程序并将原始stdout写入某个日志文件?或者甚至更好,是否有可能选择(让我们说在config.js文件中)作为后台进程运行此应用程序,如果是这样,所有stdout内容都应该写入文件?

1 个答案:

答案 0 :(得分:2)

您可能需要为文件指定绝对路径。

也就是说,根据您的操作系统,可能会有永久的替代方案。 node-windowsnode-mac都提供了您正在寻找的内容。 node-linux尚未准备就绪,但该项目有一些init.d脚本可以配置为使用日志记录运行进程。

披露:我是这三个人的作者。