从另一个 shell 回顾性地查看 bash 输出

从另一个 shell 回顾性地查看 bash 输出

我在 Linux 上的 shell 中运行 python 进程。目前我无法物理访问这台机器,只能通过 ssh 连接。
我知道 python 进程已停止,我怀疑此 shell 中存在错误跟踪。
我可以获取 shell 的 pid,但我找不到显示此 shell 中内容的方法。基本上,我正在寻找一种方法来读取已经存在的内容,并且不会丢失此输出或关闭 shell。Linux 工具是什么,可以再次查看已在运行的 shell 中正在发生的事情?

答案1

这个答案服务器故障时:

设置项可以转储 Linux 虚拟控制台的内容:

setterm -file log.txt -dump [ttynumbers]

但是,它无权访问回滚缓冲区,而只能访问当前显示的内容。

如果您想查看/dev/tty?,而不是/dev/pts/*,我认为这会起作用。用于ps -e识别相关 shell 的 tty 号。在我的测试中,我已/dev/tty2使用以下命令成功转储:

sudo setterm -file log.txt -dump 2

答案2

虽然您无法查看已经发生的事情(除非您可以恢复该会话),但有一款名为的出色工具tmux可以帮助您解决这个问题。

只需安装 ( sudo apt install tmux),运行它 ( tmux),然后在 tmux 终端内运行您想要的进程。然后按 Ctrl+B,再按 D,将其分离 - 这将使您返回到之前的 shell,您可以关闭终端。然后,从 SSH 连接到它或打开另一个终端(无论您喜欢什么)并运行tmux attach。这将使您返回到您的终端。还有其他选项可供探索,但这是在不同的终端会话中使用 tmux 的基本形式。

答案3

记录终端会话的传统工具是script。它在大多数 Unix 和类 Unix 系统上广泛可用,通常是默认的。

一些终端仿真器(xterm当然包括)以及一些pc经常在桌面机的所谓“控制台”设备(即直接连接的键盘和显示器)上使用的终端仿真器,确实有一个回滚缓冲区,您可以向后滚动以查看之前的活动,甚至可以从向后滚动的视图中复制和粘贴它。

事实上,这里的教训是(大多数)TTY 设备不会记录任何内容——它们只是传递信息。必须安排自己的记录,方法是启动script或类似的记录工具,或使用适当的终端仿真器。

(顺便说一句,一些系统也有一个“控制台缓冲区”,但它只记录内核本身的输出,并且通常通过称为的命令来访问dmesg。)

相关内容