我通过putty SSH连接到linux服务器。我试着把它作为后台进程运行,就像这样:
$ node server.js &
然而,2.5小时后,终端变得不活动,进程死亡。有没有办法,我可以保持进程活着,即使终端断开?
编辑1
实际上,我尝试了nohup,但只要我关闭Putty SSH终端或拔掉互联网,服务器进程就会立即停止。
我需要在腻子里做什么吗?
编辑2(2012年2月)
有一个node.js模块,永远存在。它将运行node.js服务器作为守护服务。
我通过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是一个条目列表。
其他回答
我在我的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"
您了解过nohup命令吗?
对于Ubuntu,我使用这个:
(exec PROG_SH &> /dev/null &)
问候
nohup节点服务器.js > /dev/null 2>&1 &
nohup的意思是:即使stty被切断,也不要终止这个进程 掉了。 > /dev/null意味着:stdout到/dev/null(这是一个dummy 不记录任何输出的设备)。 2>&1表示:stderr也转到stdout(已经重定向到/dev/null)。您可以将&1替换为文件路径以保存错误日志,例如:2>/tmp/myLog 结尾的&表示:将此命令作为后台任务运行。
简单的解决方案(如果你对返回进程不感兴趣,只想让它继续运行):
nohup node server.js &
还有jobs命令可以查看这些后台进程的索引列表。您可以通过运行kill %1或kill %2来终止后台进程,并将数字作为该进程的索引。
强大的解决方案(允许您重新连接到进程,如果它是交互式的):
screen
然后可以通过按Ctrl+a+d来分离,然后通过运行screen -r来重新连接
还可以考虑screen的更新替代方案tmux。