关闭 SSH 连接后完成 rsync 作业

jay*_*ynp 13 rsync nohup

我正在将大量文件从一台计算机传输到另一台使用rsync. 我通过 SSH 连接到源计算机并执行如下命令来执行此操作:

sudo rsync ssh --rsync-path="sudo rsync" source_dir user@host.com:dest_dir.

即使我nohup在此命令之前添加,每当我关闭通过 SSH 连接的终端窗口时,连接也会关闭。

当我关闭 SSH 连接时,如何才能让我的文件传输仍然继续?

bak*_*ytn 16

之所以nohup没有帮助您,是因为该程序使用标准 IO 文件。

这是nohup维基页面的摘录:

注 - Nohupping 后台作业通常用于避免在从远程 SSH 会话注销时终止它们。在这种情况下经常出现的另一个问题是 ssh 拒绝注销(“挂起”),因为它拒绝从/向后台作业丢失任何数据。这个问题也可以通过重定向所有三个 I/O 流来克服:

nohup ./myprogram > foo.out 2> foo.err < /dev/null &另请注意,关闭的 SSH 会话并不总是向相关进程发送 HUP 信号。其中,这取决于是否分配了伪终端。

你可以用screen它。

只需创建一个屏幕会话:screen -S rsync 然后,你用CTRL+分离你的屏幕A d

您可以断开与SSH 的连接

  • 我想补充一点,当执行任何会被中断的工作时,例如连接丢失会出现问题,然后在屏幕会话中运行它。屏幕旨在防止意外连接丢失。您可以远程登录、启动屏幕、开始工作,如果您失去连接,您可以重新连接到任何正在运行的屏幕实例。Screen 还具有其他有用的功能 - 将会话捕获到日志文件、在单个会话中具有多个“屏幕”(节省网络开销)和多个查看器(课堂风格)。还值得一提的是,tmux 是一种屏幕替代品。 (4认同)

小智 6

该屏幕命令很好,但不能完全满足我的需求。

这工作得更好:

nohup rsync -va --delete ###.###.###.###:/var/www/sites/ /var/www/sites < /dev/null &
Run Code Online (Sandbox Code Playgroud)