rsync - 在 rsync 运行时更新同步列表

rsync - 在 rsync 运行时更新同步列表

我有一个大型计算作业在远程计算机上运行,​​每大约 20 分钟生成大约 40 个数据文件。我想在生成文件后立即将其从远程计算机拉取到本地计算机,并立即从远程计算机中删除它们。

我已经使用rsync --remove-source files user@remote:~/datadir/* ./localdir.但是,这不会rsync“实时”运行,即如果添加新文件,datadir我需要重新运行rsync

据我了解,rsync首先创建要复制的文件列表,然后逐一浏览该列表。我想知道,是否有一种方法可以在添加新文件时更新列表datadir,或者有其他方法可以在生成文件后立即将文件从远程计算机移动到本地吗?

答案1

嗯,这有点像当你去看医生并说“医生!我这样做时很痛!”他说“所以不要这样做!问题解决了!”。

同步用于同步目录,但是根据您的描述,您不想这样做。您想要“取消同步”两个目录:您希望文件位于一个目录中,但不能同时位于两个目录中。

我认为您无法修改在其他系统上生成文件的代码,因为如果可以的话,您只需让它运行文件传输协议或者远程控制协议或者卷曲或者有些文件完成后立即将它们从源计算机推送到目标计算机,然后删除它们。

因此,仅从目标计算机工作,您最好只运行定期作业来登录到远程计算机并复制和删除其中的所有内容〜/数据目录。它会节省同步比较两个目录的开销:这是浪费精力,因为您不关心的内容./本地目录- 它总是会得到的内容〜/数据目录拉入其中。使用远程控制协议或者SCP是最简单的,但如果您对远程系统的唯一访问权限是同步然后运行它计划任务工作。

这将导致文件创建和传输之间出现几分钟的延迟,具体取决于您的作业周期,因为正如您所指出的,同步不运行居住。如果您需要立即传输,则必须运行文件共享服务器,例如阿穆勒在另一台计算机上,但这会带来很大的复杂性和开销,以节省几分钟的时间,而且您仍然需要经常登录才能删除文件:没有文件共享实用程序可以为您做这些事情。

在所有这一切中都潜伏着一个小恶魔您如何知道另一端有完整且未损坏的文件在等待您?

如果您只是从创建文件的目录中获取内容,那么任何数量的内容都可能导致您将完整文件的一部分传输到目标计算机。例如,您可以开始复制(或同步或其他),同时源计算机上的代码正在写出文件。或者,创建程序可能会由于某些硬件问题(例如创建过程中磁盘已满)而失败。

因此,在做这类事情时,我总是有单独的创建和传输目录,然后MV(不是 CP)文件创建成功后从创建到运输目录。我对文件损坏也非常偏执,所以我总是为源文件编写自己的摘要/校验和/清单文件,以及所有防止损坏的自动低级内容。

相关内容