为什么你应该在不稳定的 SSH 连接中使用 Tmux
你有没有在远程服务器上运行一个长时间任务时,中途丢失了 SSH 连接?我遇到过好几次。在这篇文章中,我将分享Tmux 是如何在 SSH 不断断开时拯救我的工作的,以及为什么你在 Linux 中应当将它用于不稳定的 SSH 连接。
问题
前几天,我正在从远程服务器下载一个大型数据库备份。这是一个大文件,下载将花费几个小时。
在运行的时候,我们的网络开始出现问题。我的 SSH 连接不断断开。网络不稳定。
通常,如果连接中断,下载也会停止。这意味着我得重新开始。
但这一次,一切都很好。下载继续进行。
为什么?
因为我在一个 tmux 会话 中运行备份任务!
Tmux 是什么?
Tmux 是一个终端复用器,它允许你在一个窗口中运行多个终端会话。它可以让你管理和切换不同的任务,让进程在后台运行,甚至在连接中断时重新连接到会话。
Tmux 对通过 SSH 的远程工作特别有用,因为即使连接不稳定,它也能保持你的命令运行。你可以离开一个会话,稍后再回来。你的工作仍然会在那里。
Tmux 在不稳定的 SSH 连接中如何帮助了我
在我开始下载之前,我使用以下命令打开了一个新的 tmux 会话:
tmux new -s backup_task然后我在那个 tmux 会话中开始下载,使用的命令像这样:
wget https://example.com/big-database.sql.gz后来,当我的 SSH 连接断开时,我再次登录并运行了:
tmux attach -t backup_task就这样,我回到了之前的地方。下载还在进行中。我没有丢失任何进度。
我还实现了一个简单的解决方法,以便在通过 SSH 登录时自动在远程系统上启动 tmux 会话。这在我多次忘记最初启动 tmux 会话时非常有帮助。
如果你感兴趣,可以查看以下链接,了解我是如何做到的:
- 如何在 Linux 中通过 SSH 登录远程系统时自动启动 Tmux 会话
我为什么推荐 Tmux
如果你经常在远程服务器上工作或使用 SSH,tmux 是一个非常有用的工具。它在很多方面都有帮助:
- 即使连接中断,也能保持您的工作运行,
- 让你离开然后稍后回来,
- 让你将屏幕分割成多个部分,
- 使滚动、复制和粘贴变得容易。
下次你准备远程运行任何重要任务时,别忘了在按回车前运行 tmux new -s my_session。当Wi-Fi背叛你时,你未来的自己会感谢你。
我个人使用 tmux,但你也可以使用 screen,另一个很好的终端复用器。tmux 和 screen 都是管理终端会话的可靠工具。
当 Tmux 无法帮忙时
Tmux 对于在远程服务器上运行的命令(例如在服务器上安装软件或下载文件到服务器)来说是救星。
但是,如果你的任务依赖于本地的 SSH 连接,比如将文件从服务器下载到你的笔记本电脑,那么 Tmux 就帮不了你。
例如,如果你尝试将文件从远程服务器下载到本地机器(例如,scp server:file.txt .),当 SSH 断开时,传输将会失败。因为你的本地机器是接收方。
Tmux 只会在以下情景中有帮助。
例如,假设你正在通过 SSH 访问你的远程服务器。你打开一个 tmux 会话并开始从互联网下载文件到你的远程服务器(例如,在服务器上使用 wget 或 curl)。
过了一会儿,你的本地计算机与远程服务器的SSH连接断开了。现在会发生什么?
下载在远程服务器上继续不间断,因为 Tmux 保持其运行。当你稍后通过 SSH 重新连接时,可以重新附加 Tmux 会话并检查下载进度。
下载取决于远程服务器的互联网连接,而不是你的本地SSH连接。
Tmux 就像远程服务器终端的“盾牌”。它不在乎你的本地 SSH 是否断开。
关键要点:
Tmux 不会保存依赖于本地 SSH 连接的传输,但它 可以 保护远程操作(例如将文件获取到服务器)。对于下载到本地机器的文件,请使用像 rsync --partial 这样的工具,或者先将文件获取到服务器。
- 使用 Rsync 在 SSH 上部分传输文件
希望这能帮助你理解 tmux 能做什么和不能做什么。在接下来的章节中,我将向你解释如何开始使用 tmux。
如何开始使用 Tmux
安装 Tmux
Tmux 在大多数 Linux 发行版的默认仓库中可用。
在 Debian、Ubuntu 及其衍生版本上,你可以使用以下命令安装 tmux:
sudo apt install tmux在 Fedora、RHEL 上:
sudo dnf install tmuxTmux 基本用法
开始新会话:
tmux new -s mysession这将启动一个名为“mysession”的新会话。在其中你可以运行你的命令。
然后,通过按 Ctrl + b,然后按 d 来从会话中分离。别担心,命令仍会在 tmux 会话中运行。
你可以稍后使用以下命令重新连接:
tmux attach -t mysession谢谢你们,Tmux开发者
我想感谢所有在 tmux 和其他类似工具上工作的人。这些项目虽然不太受关注,但在系统管理中起着非常重要的作用。
如果你经常使用终端,我强烈推荐尝试 tmux 或 screen。两者都很容易学习,并且在出现问题时可以帮助保护你的工作。
推荐阅读: