Solaris 中的 sftp 原子移动

Solaris 中的 sftp 原子移动

我有一个应用程序正在观察文件原子移动到特定目录。

当从 RedHat linux 服务器执行 sftp、将文件上传到 tmp 目录,然后使用“重命名”sftp 将其移动到最终目录时,我的应用程序可以很好地看到新文件。

在同一台服务器上,但当使用相同过程(上传到 tmp 目录,然后将名称“重命名”为最终目录)从 Solaris 服务器通过 sftp 上传时,我的应用程序看不到该文件。似乎 Solaris sftp 客户端“重命名”命令没有执行原子移动。

情况确实如此吗?有没有办法通过 sftp 从 Solaris 进行原子移动?

谨致问候,Raoul

答案1

rename()在 Linux 和 Solaris 上始终是原子的 - 但在跨文件系统执行rename()时始终会失败。rename()

为了使 [s]ftprename命令成为 Linux 和 Solaris 服务器上的原子操作而不是文件复制,新旧文件名必须位于同一文件系统上,rename()系统调用才能成功。

假设您在 Solaris 系统上的“tmp dir”实际上是/tmp,它将位于单独的文件系统上。无论您在 Linux 上的“tmp dir”是什么,要么恰好与最终目录位于同一文件系统上,要么您只是没有注意到 sftp 命令中缺少原子性rename

您需要确保您的“tmp dir”和最终目录位于同一个文件系统上。

相关内容