关机后恢复屏幕缓冲区

5

我有一个screen会话正在运行,该进程可能需要数天才能完成。服务器房间发生冷却故障,机器被关闭,现在已经重新启动。有没有办法恢复我的screen缓冲区?我知道进程将被终止等,但我想看到输出并尝试挽救一些工作。肯定会有地方存储这些缓冲区(虽然可能现在已经被清除了?)。

将来,如果我知道我要查看/保存屏幕输出,最好的方法是什么?

感谢任何帮助。


screen 的任务不是记录终端的输出。如果你想要这样做,应该使用类似于 script 的东西。也许在 screen 中有一个函数可以实现类似的目标,但如果没有经过我的请求,screen 这样做会让我感到惊讶和有些担忧。毕竟,这可能意味着存储私人数据。 - Alfe
我只是希望如果我没有再次运行它,那么可能会有一个缓冲区可以找到。我的程序的最终输出当然被保存在其他地方,但当它们在运行中止时,我希望能够找出它们停止的位置。下面的duskwuff提供了一个很好的解释和我应该做的事情。 - DrLivingston
1个回答

6

screen 将滚动缓冲区存储在内存中,而不是磁盘上。因此,无法从不再运行的进程中恢复它们。(虽然有可能缓冲区已被交换到磁盘上,但识别和恢复它们将非常困难。)

如果进程的输出很重要,请将其写入磁盘,可以通过将进程通过 tee 管道或启用 screen 标签上的日志记录(使用 log 命令,默认映射为 ^AH)。


谢谢。真遗憾!我真的希望它被缓冲到临时文件或其他地方。我以后一定会注意日志记录。那么deflog可以用来默认打开日志记录吗?您知道这个设置是否持久到重启还是只在一个“运行”屏幕中有效? - DrLivingston
1
GNU screen中的选项都不是粘性的。如果您想要使设置默认应用,请编写.screenrc文件。 - user149341
@duskwuff,你能提供一个证明screen在内存中存储滚动缓冲区的参考文献(文档/代码)吗?你知道如果超过限制会刷新到磁盘吗? - tutuDajuju
屏幕手册并没有详细讲述应用程序的内部机制;我认为它在任何地方都没有明确说明回滚是存储在内存中的。虽然没有提供将回滚存储在磁盘上的功能。 - user149341
与滚动相关的一些代码位于http://git.savannah.gnu.org/cgit/screen.git/tree/src/resize.c--屏幕源代码很混乱,所以我无法指出更具体的内容。希望这有助于回答你的问题,@tutuDajuju? - user149341

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接