如何将Node.js作为后台进程运行并且永不消亡?

我通过腻子SSH连接到linux服务器。我试图将其作为这样的后台进程运行:

$ node server.js &

但是,在2.5小时后,终端变为非活动状态,该过程终止。无论如何,即使在终端断开连接的情况下,我仍然可以保持该过程正常运行吗?


编辑1

实际上,我尝试过nohup,但是一旦关闭Putty SSH终端或拔出Internet插头,服务器进程就会立即停止。

我在腻子里有什么需要做的吗?


编辑2(2012年2月)

永远有一个node.js模块它将作为守护程序服务运行node.js服务器。

理查德A2020/03/16 22:21:07

试试这个简单的解决方案

cmd&退出

梅GO2020/03/16 22:21:07

除了上述出色的解决方案之外,我还提到了监督和监视工具,这些工具可用于启动过程,监视其存在并在其死后启动它。使用“ monit”,您还可以运行一些活动检查,例如检查进程是否响应http请求

神乐宝儿小小2020/03/16 22:21:07

对于Ubuntu,我使用以下命令:

(执行PROG_SH&> / dev / null&)

问候

Eva斯丁2020/03/16 22:21:07

您是否了解过nohup命令?

逆天小哥蛋蛋2020/03/16 22:21:07

Nohup和Screen为在后台运行Node.js提供了很好的轻巧解决方案。Node.js流程管理器(PM2)是一个方便的部署工具。在系统上全局安装npm:

npm install pm2 -g

将Node.js应用程序作为守护程序运行:

pm2 start app.js

您可以选择将其链接到Unitech 生产的监控SAAS Keymetrics.io

阳光梅L2020/03/16 22:21:07
$ disown node server.js &

它将从活动任务列表中删除命令并将该命令发送到后台

十三Tom小哥2020/03/16 22:21:07

根据@Yoichi的回答,我的shell rc文件中具有此功能:

nohup-template () {
    [[ "$1" = "" ]] && echo "Example usage:\nnohup-template urxvtd" && return 0
    nohup "$1" > /dev/null 2>&1 &
}

您可以通过以下方式使用它:

nohup-template "command you would execute here"
Mandy猴子2020/03/16 22:21:07

nohup即使终端死机也将允许程序继续。实际上,我遇到了nohup阻止SSH会话正确终止的情况,因此您也应该重定向输入:

$ nohup node server.js </dev/null &

根据nohup配置方式,您可能还需要将标准输出和标准错误重定向到文件。

JinJin达蒙2020/03/16 22:21:07

另一个解决方案取消了工作

$ nohup node server.js &
[1] 1711
$ disown -h %1
凯西里2020/03/16 22:21:07

您确实应该尝试使用screen这比仅仅做起来要复杂一些nohup long_running &,但是一旦您再也没有回来,便要了解屏幕。

首先开始您的屏幕会话:

user@host:~$ screen

运行任何您想要的:

wget http://mirror.yandex.ru/centos/4.6/isos/i386/CentOS-4.6-i386-binDVD.iso

按ctrl + A,然后按d。做完了 您的会话一直在后台进行。

您可以按列出所有会话screen -ls,并按screen -r 20673.pts-0.srv命令附加到某些会话,其中0673.pts-0.srv是条目列表。

Jim猴子Eva2020/03/16 22:21:07

nohup node server.js > /dev/null 2>&1 &

  1. nohup表示:即使终止了笔势也不要终止此过程。
  2. > /dev/null表示:stdout转到/ dev / null(这是一个虚拟设备,不记录任何输出)。
  3. 2>&1表示:stderr也转到stdout(已重定向到/dev/null)。您可以将&1替换为文件路径,以记录错误日志,例如:2>/tmp/myLog
  4. &最后意味着:将此命令作为后台任务运行。
神乐十三2020/03/16 22:21:07

简单的解决方案(如果您对返回该过程不感兴趣,只希望它继续运行):

nohup node server.js &

还有一个jobs命令可以查看这些后台进程的索引列表。您可以通过运行kill %1kill %2将数字作为该进程的索引来杀死后台进程。

强大的解决方案(如果它是交互式的,则允许您重新连接到该过程):

screen

然后可以通过按Ctrl + a + d进行分离,然后通过运行将其附加回去 screen -r

还可以考虑使用新的替代屏幕tmux。