流式传输期间的“rsync”

流式传输期间的“rsync”

这个问题本质上是因为我使用经验不足rsync,如果重复我会立即删除它。

我有一个/dir-scr本地文件夹,不断地输入来自传感器读数的生产数据。大约每 10 分钟一班yyyymmddhhmmss.dat正在创建一个带有时间戳文件名的文件,大约填充 0 到 40MB。并关闭。大约 10 分钟后,将创建另一个文件。

我已经执行了几次更新的批量执行:

$ rsync -azvP /dir-src/* host-dst:dir-src/

它成功复制并替换部分填充的文件,即复制 40MB 的完整文件和 25MB 的当前文件,并在下次更新时,用 40MB 的完整版本替换 25MB 文件。

目前,我进行了手动移动操作,以免错误地删除任何尚未复制的文件。

现在我想使用其中一个rsync标志,例如:

  • --exclude
  • --delete-excluded
  • --delete-after
  • --remove-source-files

但我不确定他们的操作。

问题是,如何用于rsync移动文件,比如说,超过 10 分钟的文件,以及/dir-src当且仅当它们已经存在时删除host-dst:dir-dst/

答案1

我相信使用 rsyncs 内置删除选项是不是正确的方法来解决这个问题。如果您执行类似以下操作:

$ rsync -azvP --remove-source-files /dir-src/* host-dst:dir-src/

您可能会遇到 rsync 传输部分填充的文件然后将其删除的情况。如果使用相同名称重新创建文件,则 rsync 将覆盖目标计算机上的副本。因此,您将丢失文件的前半部分。

也许你想考虑一下这个。让rsync正常进行传输,然后你可以设置一个定时任务每十分钟运行一次并执行类似的操作。

$ find /dir-src -type f -mmin +15 -exec rm -f {} +

这将找到该dir-src目录下所有超过 15 分钟的文件并将其删除。我们在此假设填充文件所需的最长时间为 15 分钟。您可能需要调整该值以满足您的需求。另外,在测试时请替换-exec rm -f {} +-print,这将确保 find 在执行任何破坏性操作之前仅拾取您实际要删除的文件。

在您的评论中,您说您的网络连接不可靠,并且担心 rsync 可能无法成功完成。创建辅助目录后,解决此问题的一种方法可能如下:

  1. 每 15 分钟,将所有超过 15 分钟的文件从 移动dir-srcdir-aux
  2. 每 10 分钟,rsync 文件从dir-auxhost-dst:dir-src
  3. 每 60 分钟删除dir-aux.

这将确保 rsync 在文件被删除之前有机会运行 5-6 次。根据您的连接情况,这可能就足够了。然后,您可以根据测试结果延长或缩短 60 分钟。

相关内容