我使用 putty ssh 从 Windows 7 连接到我的网络主机。当我在远程主机上启动脚本时,有时会断开连接。我必须再次连接,从命令“ps aux”中我可以看到我的脚本仍在运行,但终端上不再有输出。
重新登录后如何查看脚本输出?
谢谢。
答案1
你应该考虑跑步GNU 屏幕通过 ssh 登录后。您可以从那里执行大量操作,您可以在网上阅读相关内容。基本功能将为您提供一个新的 shell,即使您关闭了 putty 窗口,它也会(神奇地)继续运行。
当您重新连接到服务器时,只需使用“-R”选项启动屏幕,您就可以重新连接到现有会话。神奇。
它可能已经安装在您的系统中;尝试在 shell 提示符下输入“screen”。
一旦开始使用 screen,您就会想知道如果没有它您该如何生活。要获得更好的 screen 体验,请尝试“byobu”。它已预装在较新版本的 Ubuntu 上。
答案2
如果不安装/配置其他软件,您就无法做到这一点,但是您可以将脚本的输出重定向到日志文件,并在脚本完成之后或在脚本运行时通过执行以下命令来执行脚本来查看该日志文件:
myscript.sh > ~/scriptlog.log
输出将被写入scriptlog.log
您的主目录。
正如 Journeyman Geek 在其评论中所说:
然后你可以使用以下方式近乎实时地查看日志文件
tail scriptlog.log
答案3
如果您不需要这些功能或不想要使用这些典型的可分离进程管理工具的开销:
- GNU 屏幕
- 屏风
- 德塔赫
- tmux
- 虚拟网络
- 西普拉
你可以在命令前加上前缀来跟踪进程的输出禁止当您启动它时。默认情况下,它会将标准输出和标准错误保存到nohup.out
,但请参阅手册页以了解更多详细信息。
禁止一旦分离,将不允许您与该进程交互,但它将要允许脚本完成并允许您在事后查看输出。对于更复杂的情况,例如长时间运行的交互式进程或 X 客户端,您可能需要查看列出的其他工具之一,看看它们是否更适合您的需求。
答案4
我怀疑任何现有的答案是否对您的情况有帮助,因为您已经在没有 screen/tmux/nohup 的情况下运行了您的程序。
strace
在程序仍在运行时尝试:
strace -p $PID -e trace=write
如果您可以识别 stdout 的 fd 号码(可能需要猜测),您可以|grep -F "write(1"
向命令中添加一个(这里我们假设 stdout=fd 1)。