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

时间:2010-04-06 10:03:19

标签: language-agnostic filesystems webserver process integrity

例如,在高流量网络服务器上。

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

前段时间我被告知重命名文件不会改变'inode数据',因此读取文件的进程可以继续这样做而不会出现故障。当然,不是复制新文件,而是重命名临时副本更快更安全。

这仍然是最佳做法,如果不是,你会做什么?

1 个答案:

答案 0 :(得分:1)

假设您使用Apache http-server。

Apache通常使用内核函数sendfile来发送静态文件,这意味着由内核来缓存文件内容并跟踪它何时发生变化。

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

mv newfile oldfile

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