轮询就绪文件

时间:2018-10-01 05:30:09

标签: linux filesystems

我在Linux上工作。如何知道gzip文件已准备好?我有一台用于轮询目录/dir/中的文件的服务器。 gzip还存在另一个独立的进程,该文件归档到/dir/。我的服务器如何知道该文件已准备好?

1 个答案:

答案 0 :(得分:0)

对此没有现成的解决方案。查看文件的最后修改时间戳(mtime)是不可靠的,因为如果系统过载(或gzip操作的输入未准备好),写入可能会延迟,否则生成过程可能会停止写入,因为崩溃了。

通常,当应用程序需要执行此类操作时,它们会按照特定的模式以不同的名称写入临时文件。假设临时文件仍在处理中且未完成,则读取过程会识别并跳过这些临时文件。编写器完成后,它将文件重命名为其最终名称(这是原子操作),只有这样,阅读器才能将其选中。这种方法在Dan Bernstein的maildir格式中变得很流行:

在maildir中,使用不同的目录进行登台,但一般原理是相同的。

也可以使用锁定文件和POSIX advisory locking,但它们会导致更加复杂。但是,在某些情况下,可以以不需要繁忙的等待/轮询/定期探测的方式使用它们。