我有一些工作需要运行,需要附加到终端(或在前台)。该作业在远程服务器上运行,并且需要在用户注销后继续运行。我知道 vnc 服务器,但是,我想知道是否有任何内置工具redhat
可以解决这个问题。 (也就是说,我没有 sudo 来安装额外的软件)。
答案1
GNU 屏幕这就是您正在寻找的。它已预安装在我使用过的所有 *nix 系统上,因此应该安装在 Red Hat 上。screen
充当终端服务器,可以与终端客户端连接和分离。它允许有趣的可能性,例如多个客户端同时查看相同的终端会话、多个选项卡、(水平)分屏、远程分离(其他客户端)等。
如果您的 ssh 连接意外中断,您之前运行的命令将不会知道这一情况,并将继续正常运行。您可能在屏幕内的 10 个不同选项卡中运行 10 个不同的程序,并且它们都将继续运行。然后,您可以使用同一命令的几个不同变体重新连接(登录后) - 我使用的是:-
screen -RD
这意味着将之前的屏幕会话重新连接到当前终端,并且 IIRC 分离可能仍连接的任何其他客户端。
要向 发送命令screen
,当您在会话中时,默认情况下您可以在按另一个字母之前使用“Ctrl+a”前缀,例如创建或关闭窗口。有大量的屏幕备忘单在线,当然,如果您需要的话,总有手册页提供更多信息。
Screen 已经存在很长时间了,所以有更新的替代品。我切换到多路复用器大约一年前,就没有回头过。这可能需要编译,但它允许垂直分屏,这是我喜欢它的主要原因。
不过,上述解决方案回避了您的问题。如果您还没有开始您的计划,他们会为您提供解决方案。如果您有一个长时间运行的程序,该程序不是在screen
或tmux
会话中创建的,那么您仍然可以恢复它。 AFAIK,您将无法恢复命令行历史记录,但您可以恢复对进程的控制。我为此使用的程序是reptyr
,我已经在 Mac OSX 和 Debian Linux 版本上成功构建并使用了它。 IIRC,这需要 sudo 权限才能运行。
答案2
要启动“隐藏”前台终端:
ssh server.com -t screen -S applicationName [/usr/bin/executable]
分离(隐藏):CTRL+AD
附加(恢复):ssh server.com -t screen -r applicationName