node.js - 将 Node.js 应用程序作为后台进程启动

标签 node.js daemon forever

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

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('...');
}

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

如何在后台运行我的 Node 应用程序并将原始 stdout 写入某个日志文件?或者甚至更好,是否可以有一个选项(假设在 config.js 文件中)将此应用程序作为后台进程运行,如果是,则所有 stdout > 东西应该写入文件吗?

最佳答案

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

也就是说,根据您的操作系统,有一些替代方法可能会起作用。 node-windowsnode-mac两者都能满足您的需求。 node-linux尚未准备好,但该项目有一些 init.d 脚本,可以配置为运行带有日志记录的进程。

披露:我是这三本书的作者。

关于node.js - 将 Node.js 应用程序作为后台进程启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16754485/

相关文章:

c - 从守护进程运行时 XOpenDisplay 失败(C 语言)

javascript - 无法永远卸载nodejs

mysql - Upstart node.js mysql连接

javascript - 路线 express 操纵

node.js - "ConnectionError: Already connecting to database! Call close before connecting to different database"连接SQL服务器与nodejs

javascript - Mongoose - 是否可以修改键的值以匹配 find() 查询的 where 条件?

node.js - 重新启动后,nodejs 应用程序无法永久正确启动

node.js - 如何枚举nodejs+express中的所有 session ?

java - 在 J2EE 中的上下文监听器中运行线程是否相关?

docker:尝试连接到 Docker 守护进程套接字时权限被拒绝