我在Linux上工作。如何知道gzip
文件已准备好?我有一台用于轮询目录/dir/
中的文件的服务器。 gzip
还存在另一个独立的进程,该文件归档到/dir/
。我的服务器如何知道该文件已准备好?
答案 0 :(得分:0)
对此没有现成的解决方案。查看文件的最后修改时间戳(mtime)是不可靠的,因为如果系统过载(或gzip
操作的输入未准备好),写入可能会延迟,否则生成过程可能会停止写入,因为崩溃了。
通常,当应用程序需要执行此类操作时,它们会按照特定的模式以不同的名称写入临时文件。假设临时文件仍在处理中且未完成,则读取过程会识别并跳过这些临时文件。编写器完成后,它将文件重命名为其最终名称(这是原子操作),只有这样,阅读器才能将其选中。这种方法在Dan Bernstein的maildir格式中变得很流行:
在maildir中,使用不同的目录进行登台,但一般原理是相同的。
也可以使用锁定文件和POSIX advisory locking,但它们会导致更加复杂。但是,在某些情况下,可以以不需要繁忙的等待/轮询/定期探测的方式使用它们。