退出 SSH 会话后保持命令运行的 4 种方法

假设您正在通过 SSH 远程访问另一个系统。 您想要运行一个需要很长时间才能完成的命令,然后退出 SSH 会话,但即使您不再与远程系统连接,也要让该命令继续运行。 你是怎样做的? 您可能知道,一旦您退出 SSH,所有正在运行的作业都将终止。 你会从头开始工作吗? 你不必。 在这里,我给出了 4 种方法来在您从 ssh 会话注销后保持命令运行。 继续阅读。

在 Linux 中注销 SSH 会话后保持命令运行

可能有很多方法可以做到这一点。 但是,我发现以下方法既简单又直接。

方法 1 – 使用屏幕

屏幕 工具,一个带有 VT100/ANSI 终端仿真的全屏窗口管理器,允许您安全地从 SSH 会话中分离,而无需退出远程作业。 这对那些使用多个远程服务器的人会很有帮助。 屏幕命令预装在大多数 Linux 操作系统中。 以防万一,如果它没有安装,你可以使用你的发行版的包管理器来安装它。

在 Arch Linux 及其衍生产品上:

$ sudo pacman -S screen

在 RHEL、CentOS 和其他基于 RPM 的系统上:

$ sudo yum install screen

在 Debian、Ubuntu 和其他基于 DEB 的系统上:

$ sudo apt-get install screen

在 SUSE/OpenSUSE 上:

$ sudo zypper install screen

在远程系统上安装 screen 后,启动 screen 会话:

$ screen

屏幕会话现在已经开始。 现在运行您想在远程系统上执行的任何作业或任务。

我要下载 Ubuntu 16.04 映像:

$ wget https://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso

Ubuntu 16.04 ISO 大小约为 1.5GB。 在正常的宽带连接下下载大约需要一个小时。 你不必等那么久。 只需让下载过程在远程系统上运行,然后按退出屏幕会话 “Ctrl-A” 其次是 “d”. 您将看到如下所示的输出。

[detached from 1365.pts-0.server]

与屏幕会话分离后,您可以从远程系统注销。 远程作业将继续在服务器中运行。

您可以随时使用以下命令重新附加到屏幕会话:

$ screen -r

您将看到该进程仍在那里运行。

如果您有多个屏幕会话,则需要键入屏幕会话 ID 才能重新附加它。 要查看屏幕会话数,请运行:

$ screen -ls

示例输出为:

There are screens on:There are screens on: 
     1382.pts-0.server (Saturday 15 July 2017 04:39:51  IST) (Detached) 
     1365.pts-0.server (Saturday 15 July 2017 04:38:44  IST) (Detached)
2 Sockets in /var/run/screen/S-sk.

现在,重新附加到所需的屏幕会话,比如说 1382, 跑:

$ screen -r 1382

有关更多详细信息,请参阅手册页。

$ man screen

推荐下载免费备忘单:“Linux 命令行备忘单”

方法 2 – 使用 tmux

多路复用器 是一个终端多路复用器,可以从单个屏幕创建、访问和控制多个终端。 tmux 会话可以从屏幕上分离并继续在后台运行,然后再重新连接。 与 Screen 工具一样,您也可以使用 tmux 从 SSH 会话中分离,而无需退出远程作业。 Tmux 命令预装在大多数 Linux 操作系统上。 以防万一,如果它没有安装,你可以使用你的发行版的包管理器来安装它。

在 Arch Linux 及其衍生产品上:

$ sudo pacman -S tmux

在 RHEL、CentOS 和其他基于 RPM 的系统上:

$ sudo yum install tmux

在 Debian、Ubuntu 和其他基于 DEB 的系统上:

$ sudo apt-get install tmux

在 SUSE/OpenSUSE 上:

$ sudo zypper install tmux

安装 tmux 后,使用命令启动 tmux 会话:

$ tmux

现在,开始你的任务或工作。 然后安全地从 tmux 会话中分离,而无需通过按退出远程作业 “CTRL-B” 其次是 “d”. 这将分离您的 tmux 会话,但会让您在后台运行的该会话中进行操作。 这意味着即使您与会话断开连接,所有遥控器也将运行。

要列出可用会话,请运行:

$ tmux ls
0: 1 windows (created Sat Jul 15 16:51:35 2017) [134x33]
1: 1 windows (created Sat Jul 15 16:53:58 2017) [134x33]

您可以使用相应的会话 ID 重新附加到 tmux 会话,如下所示:

$ tmux attach -t 0

有关更多详细信息,请参阅手册页。

$ man tmux

方法 3 – 使用 Reptyr

如果您忘记在 screen/tmux 中启动命令怎么办? 不用担心。 这里是哪里 雷普蒂尔 进来帮忙。 Reptyr 帮助您在 pty 之间移动正在运行的进程。 我们已经发布了关于 Reptyr 的详细指南。 查看以下链接。

  • Reptyr – 将正在运行的进程从一个终端移动到另一个终端而不关闭它

方法 4 – 使用 nohup

诺哈普, 代表 H向上, 是另一个命令行实用程序,即使在您与 SSH 会话断开连接后也可以帮助您运行 Linux 命令。 由于它是 GNU coreutils 的一部分,因此您不必安装它。 它预装在所有 Linux 发行版中。

使用非常简单。 登录远程系统后,您所要做的就是:

$ nohup <command> &

是的,就是这么简单。

例子:

$ nohup wget https://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &

现在,您可以退出 SSH 会话。 远程作业将继续运行。

登录到远程系统并运行以下命令以查看正在运行的作业列表。

$ jobs -l
[1]+ 1421 Running nohup wget https://mirror.waia.asn.au/ubuntu-releases/xenial/ubuntu-16.04.2-desktop-amd64.iso &

默认情况下,输出将附加到“nohup.out”。 当然,您可以更改输出文件。

这是另一个 example.

$ nohup find -size +10M > log.txt &

上面的命令将查找大小大于 10M 的文件并将输出写入 log.txt 文件。

有关更多详细信息,请参阅手册页。

$ man nohup

而且,这就是现在的全部内容。 有什么想法吗? 请随时在下面的评论部分告诉我。 更多好东西即将到来。 继续光顾!

干杯!

感谢您的光临!

帮助我们帮助您:

祝你有美好的一天!!