我在远程 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 将结束。解决方法是登录并立即启动某种虚拟终端(这可以使用dtach
、abduco
、tmux
或等工具来完成screen
)。当连接断开时,您所在的 shell 将结束,但您可以打开一个新 shell 并重新连接到正在运行您实际工作的 shell 的虚拟终端。
答案3
有人添加了reptyr
评论而不是答案,所以我无法投票,但这似乎是对已编辑问题的一个很好的答案,并且在 CentOS 上运行得很好。
看:
- https://github.com/nelhage/reptyr
- https://www.ostechnix.com/reptyr-move-running-process-new-terminal/
有没有办法可以在重新连接后恢复挂起的会话?
编辑:我正在使用 yum 进行一些更新和安装,我担心如果进程在执行任何操作时一直挂起,这可能会成为一个问题。
同样的事情,我失去了与 yum 更新会话的远程连接。所以我搜索并找到了这个问题...然后这次重新连接并使用屏幕:
- 重新连接 ssh
- 屏幕
- 按照上面的链接安装reptyr
- ps -a | grep 百胜
- 雷普特尔PSID
我就看到了百胜几个小时前给出的恢复提示。
从技术上讲,答案都是正确的,这不是挂起会话的恢复,而是将孤立进程重新设置为当前会话。
而且非常有用,它也...
答案4
不,断开连接后您无法恢复 shell。相反,您可以做的是确保您正在运行的命令在断开连接后继续运行。
要实现此目的,请使用“nohup”和“disown”命令,这些命令通常是大多数 shell 上的内置命令,即您不需要安装任何东西。但这仅适用于非交互式命令。
因此,步骤如下:
- 登录服务器
- 运行命令:“nohup sudo yum update &”(这也会将所有输出记录到当前目录中的 nohup.out 文件中)
- 运行“否认%1”
- 此时请随意断开连接或等待断开连接:)
当您返回服务器时,只需“tail nohup.out”即可查看该命令的运行情况。