我通过putty SSH连接到linux服务器。我试着把它作为后台进程运行,就像这样:

$ node server.js &

然而,2.5小时后,终端变得不活动,进程死亡。有没有办法,我可以保持进程活着,即使终端断开?


编辑1

实际上,我尝试了nohup,但只要我关闭Putty SSH终端或拔掉互联网,服务器进程就会立即停止。

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


编辑2(2012年2月)

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


当前回答

你真的应该尝试使用屏幕。这比仅仅做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是一个条目列表。

其他回答

另一个解决方案是放弃这份工作

$ nohup node server.js &
[1] 1711
$ disown -h %1

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

NPM安装pm2 -g

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

Pm2启动app.js

您可以选择将其链接到Keymetrics。io由Unitech开发的监控SAAS。

你真的应该尝试使用屏幕。这比仅仅做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是一个条目列表。

您了解过nohup命令吗?

我在我的shell rc文件中有这个函数,基于@Yoichi的回答:

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

你可以这样用:

nohup-template "command you would execute here"