如何在断开连接后恢复 shell

如何在断开连接后恢复 shell

我在远程 CentOS 5.6 机器上做一些工作,但我的网络一直掉线。有没有办法可以在重新连接后恢复挂起的会话?

编辑:我正在使用 yum 进行一些更新和安装,我担心如果进程在执行任何操作时一直挂起,这可能会成为一个问题。

答案1

没有办法,但为了防止这种情况,我喜欢使用tmux.我启动 tmux,开始操作,然后继续我的路。如果我返回并发现连接已断开,我所要做的就是重新连接并输入tmux attach

这是一个例子。

$ tmux
$ make <something big>
......
Connection fails for some reason
Reconect

$ tmux ls
0: 1 windows (created Tue Aug 23 12:39:52 2011) [103x30]

$ tmux attach -t 0
Back in the tmux sesion

答案2

tmux 和 screen 的建议都是很好的建议。它们暗示了你的问题的答案,但实际上并没有陈述它。问题的答案是:没有办法。如果您通过 ssh 登录,则当连接断开时 shell 将结束。解决方法是登录并立即启动某种虚拟终端(这可以使用dtachabducotmux或等工具来完成screen)。当连接断开时,您所在的 shell 将结束,但您可以打开一个新 shell 并重新连接到正在运行您实际工作的 shell 的虚拟终端。

答案3

有人添加了reptyr评论而不是答案,所以我无法投票,但这似乎是对已编辑问题的一个很好的答案,并且在 CentOS 上运行得很好。

看:

有没有办法可以在重新连接后恢复挂起的会话?

编辑:我正在使用 yum 进行一些更新和安装,我担心如果进程在执行任何操作时一直挂起,这可能会成为一个问题。

同样的事情,我失去了与 yum 更新会话的远程连接。所以我搜索并找到了这个问题...然后这次重新连接并使用屏幕:

  1. 重新连接 ssh
  2. 屏幕
  3. 按照上面的链接安装reptyr
  4. ps -a | grep 百胜
  5. 雷普特尔PSID

我就看到了百胜几个小时前给出的恢复提示。

从技术上讲,答案都是正确的,这不是挂起会话的恢复,而是将孤立进程重新设置为当前会话。

而且非常有用,它也...

答案4

不,断开连接后您无法恢复 shell。相反,您可以做的是确保您正在运行的命令在断开连接后继续运行。

要实现此目的,请使用“nohup”和“disown”命令,这些命令通常是大多数 shell 上的内置命令,即您不需要安装任何东西。但这仅适用于非交互式命令。

因此,步骤如下:

  1. 登录服务器
  2. 运行命令:“nohup sudo yum update &”(这也会将所有输出记录到当前目录中的 nohup.out 文件中)
  3. 运行“否认%1”
  4. 此时请随意断开连接或等待断开连接:)

当您返回服务器时,只需“tail nohup.out”即可查看该命令的运行情况。

相关内容