2010-04-06 42 views
1

例如在高流量的Web服务器上。避免覆盖正在使用的文件的问题

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

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

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

回答

1

假设您使用Apache http-server。

Apache通常使用内核函数sendfile来发送静态文件,这意味着它取决于内核缓存文件内容并跟踪其更改时间。

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

mv newfile oldfile

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

+1

你是不是故意输入“mv newfile oldfile”? – zaf 2010-04-08 12:01:07

+0

感谢您通知错误。 – Ernelli 2010-04-09 09:01:48