由于这篇文章在过去几年里受到了很多关注,所以我在文章的底部列出了每个平台的最佳解决方案。


原来的帖子:

我希望我的node.js服务器在后台运行,即:当我关闭我的终端时,我希望我的服务器继续运行。我在谷歌上搜索过这个,并提出了这个教程,但它并不像预期的那样工作。因此,我没有使用这个守护进程脚本,我认为我只是使用了输出重定向(2>&1 >>文件部分),但这也不退出-我在终端中得到一个空行,就像它在等待输出/错误一样。

我也尝试过把进程放在后台,但是只要我关闭终端,进程就会被杀死。

那么,当我关闭本地计算机时,如何让它继续运行呢?


高级解决方案:

Systemd (Linux) Launchd (Mac) node-windows (Windows) PM2 (node . js)


当前回答

你可以使用Forever,一个简单的CLI工具,确保给定的节点脚本持续运行(即永远): https://www.npmjs.org/package/forever

其他回答

使用pm2模块。Pm2 nodejs模块

我使用Supervisor进行开发。它就是有用。当你对.js文件进行更改时,管理器会自动重新启动你的应用程序,加载这些更改。

这是其Github页面的链接

安装:

Sudo NPM安装管理器

使用-e可以很容易地让它监视其他扩展名。我经常使用的另一个命令是-i来忽略某些文件夹。

您可以使用nohup和supervisor使您的节点应用程序即使在注销后也能在后台运行。

Sudo nohup supervisor myapp.js &

有人注意到“2>&1”的位置有一个小错误吗?

2>&1 >> file

应该是

>> file 2>&1

如果使用nohup -,请尝试执行该命令

nohup npm start 2>/dev/null 1>/dev/null&

你也可以使用永久来启动服务器

forever start -c "npm start" ./ 

PM2也支持npm启动

pm2 start npm -- start

我只是使用daemon 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)来启动和管理简单的节点应用程序。