代码之家  ›  专栏  ›  技术社区  ›  zaf

避免覆盖正在使用的文件的问题

  •  1
  • zaf  · 技术社区  · 15 年前

    例如,在高流量的Web服务器上。

    为了减少切换文件时的问题,我通常先将旧文件重命名,然后在新文件中重命名。

    一段时间前有人告诉我,重命名文件不会改变“inode数据”,这样读取文件的进程就可以继续这样做而不会出现问题。当然,与在新文件中进行复制相比,重命名临时副本更快更安全。

    这仍然是最佳实践吗?如果不是,你会怎么做?

    1 回复  |  直到 15 年前
        1
  •  1
  •   Ernelli    15 年前

    假设您使用ApacheHTTP服务器。

    Apache通常使用内核函数send file来发送静态文件,这意味着由内核来缓存文件内容并跟踪文件的更改。

    您应该创建新文件,然后用新文件替换旧文件,例如。

    mv newfile oldfile

    然后将提供新文件的内容而不是旧文件。请注意,在HTTP级别上启用的任何缓存设置都可能影响浏览器和代理是否传递旧文件或新文件。