我有一个 node.js 应用程序,它一直运行到用户退出进程。我正在尝试将这个应用程序作为后台进程运行,但是,我的应用程序最初会向标准输出输出一些内容:
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)
我还尝试使用永久监视器并编写了一个小脚本:
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
内容都应该写入文件?