保持远程命令运行并存储输出

保持远程命令运行并存储输出

设想;

我已经通过 SSH 连接到一台机器,打开了一个新的屏幕会话,并启动了一个脚本。

几天后,我通过 SSH 返回到该计算机,重新连接屏幕会话并查看已生成的输出;我无法向后滚动输出。

据我所知,屏幕存储了一个“屏幕大小”的标准输出输出。如果我的脚本在 48 小时内生成了 100 行输出,我就看不到全部内容,只能看到最后 40 行左右。有没有办法让screen我保持运行的脚本存储所有标准输出,这样我就可以通过它重新连接屏幕和 PgUp/PgDn,就像它是在我的本地计算机上运行的脚本一样?

也许screen这不是最好的方法?是否有更好的方法可以在注销后让脚本在远程计算机上运行,​​并能够在以后重新附加到该进程并查看所有输出?

答案1

您可以简单地将输出存储在文件中

my_command > mylogfile

如果您想查看命令运行时发生的情况,可以tail在第二个屏幕上使用:

tail -f mylogfile

您不仅能够看到整个输出,还能够对其进行处理(比较、搜索……)

编辑如果您不想使用,screen可以随时使用nohup并关闭会话

nohup my_command > mylogfile &

答案2

您还可以在启动屏幕时使用参数 -L 打开输出日志记录,方法是:

screen -L -S <screen_name>

这将在您通过上述命令启动屏幕的目录中创建一个名为 screenlog.0 的日志文件。

要查看 screenlog.0,请使用 cat (而不是 vi)参考文献

cat screenlog.0

答案3

Screen 确实保留了过去输出行的日志;它在屏幕文档中称为“回滚历史缓冲区”。

要向后滚动导航,请按C-a ESC(copy)。您可以使用箭头和PgUp/PgDn键进行导航,以及其他键搜索和复制文本。按此键ESC退出回滚/复制模式。

默认情况下,Screen 仅保留 100 行的值。放一个defscrollback您的指令.screenrc更改此数字。

如果您想要脚本的完整日志,请将其保存在文件中。在 Screen 内运行它,以便能够连接回父 shell,并轻松查看脚本是否仍在运行、挂起和重新启动等。或者将其分叉nohup。要在日志文件增长时对其进行监控,请使用tail -f.

答案4

如果您想在屏幕上看到输出并记录它,那么只需将其tee通过管道传递给您的日志名称作为参数即可。

相关内容