移动大文件夹时保持 SSH 连接处于活动状态

移动大文件夹时保持 SSH 连接处于活动状态

语境 :

我有一个网络服务器(我的托管服务提供商是 OVH)。

我有包含许多文件的大文件夹在许多子目录中(100k+ 个文件)。

我需要移动此目录在我的主机上从一个地方移动到另一个地方。

根据我在互联网和 StackOverflow 上看到的内容,我认为最好的方法是使用动量命令

确实,我只需要移动整个文件夹及其所有内容(有点像“重命名”),并且我相信我的目标路径位于同一个文件系统上(但我无法确保这一点)。

所以我打算这样做:

mv /home/www/folder1/myfolder /home/www/folder2/myfolder &

(我将使用“&”在后台执行命令而不阻塞)

要执行此命令,我唯一的方法是使用 ssh 命令通过 SFTP 连接到我的网络托管

ssh username@address

问题 :

当我这样做时(我使用的是 Windows 10),几分钟后就会出现错误(我猜这是因为我没有活动):

Connection reset by <IP_ADDRESS> port 22

我担心的是,在我启动 mv 命令后,由于需要一段时间,我的 ssh 连接将因此错误而关闭......

为了避免关闭连接,我尝试在客户端上创建一个 ~/.ssh/config 文件,其中包含以下内容,正如这里解释的那样

Host *
ServerAliveInterval 240

我也做了 chmod

chmod 600 ~/.ssh/config

然后,当我尝试从 Windows PowerShell 启动 ssh 连接时,出现错误

Bad owner or permissions on C:\\Users\\antoi/.ssh/config

然后我尝试从 git bash 开始,没有出现这个错误,ssh 连接打开时没有出现错误。

但几分钟后我又出现另一个错误并且我的连接也被关闭了:

attente de données expirée : déconnexion automatique

我没有英文信息,但应该是这样的

expired data wait: automatic logout

问题 :

你能告诉我吗如果我的 mv 命令将继续执行在服务器上即使我的 SSH 连接已丢失

如果答案是否定的,你知道吗我如何确保我的 ssh 保持活动状态在移动操作过程中?

提前谢谢您,如果没有这些答案,我就无法实现迁移,因为如果我的数据被损坏或处于未知状态,那将太危险了!

答案1

你能告诉我即使我的 SSH 连接丢失,我的 mv 命令是否会继续在服务器上执行吗?

这取决于 Linux 发行版,但最有可能的是 -。当您在后台运行该进程时,一旦 shell 终止,该进程也会被终止。

如果答案是否定的,那么您知道如何确保在移动操作期间我的 ssh 保持活动状态吗?

我认为最好的方法是不要试图猜测它将运行多长时间,只需在前台运行命令(删除&):

mv /home/www/folder1/myfolder /home/www/folder2/myfolder

如果您不打算执行任何其他操作并且让 shell 处于不活动状态,为什么要在后台运行该命令?


第二个问题的另一种解决方案是使用 keep-alive,就像您在配置中所做的那样。但是,您收到的所有者或权限错误错误很可能是因为文件所有者错误,因此请尝试执行以下操作:

chown antoi:antoi ~/.ssh/config

(在哪里安托伊是您的用户名)

答案2

如果您的目标是“移动文件”,而不是“保持连接”,那么简单的方法是使用nohup,即将命令更改为

nohup mv /home/www/folder1/myfolder /home/www/folder2/myfolder &

这样,您可以断开 SSH 会话,并且命令将继续在服务器上运行,尽管您可能需要ps稍后使用它来检查移动操作是否已完成。

如果您想自动保持连接,您应该检查您使用的 ssh 客户端的相关设置,有些客户端可以定期发送 ping 请求以保持连接。

答案3

如果你正在使用 SSH,你应该查看SCP。 这会不是删除现有文件,但它绝对会复制文件并维持 ssh 连接:

scp -r /本地/目录/用户名@to_host:/远程/目录/

如果您在 Windows 机器上运行副本,我建议您使用 WinSCP 之类的程序。它是 GUI 驱动的,但它具有强大的命令行,您可以使用一些简单的标志来编写传输脚本。

答案4

如果我需要通过 ssh 执行一个需要一些时间的操作,我通常会使用screen并从其中启动一个命令。其他类似的工具是tmux

两者都应该在断开连接后继续存在,并且在重新建立连接后,您仍然应该能够重新连接到会话(因为screen -r选项会这样做)。

相关内容