这个问题是关于 Web 应用程序的部署。
简介(可以跳过)
我正在使用 django,而我的托管服务提供商设置 django 支持的方式最终导致 webapp 分散在至少三个位置:
- 实际应用代码在
/something/<my_apps>/
- 网站设置/网址/模板
/something/<my_site>/
- css、javascript 和其他“媒体”在
/something_else/media/
因此,当我部署/升级网站时,我需要一次更新多个目录。
实际问题:
有没有办法进行原子文件复制?无论如何,我都不是 linux 系统的“专家”,所以请原谅我的无知。
复制操作涉及几个目录树,两个或三个,基本上:
copy _tree1 to tree1
copy _tree2 to tree2
原子,我的意思是:
- 它要么完全复制,要么根本没有复制。它永远不应该处于一些复制但失败的状态。
- 它在尽可能短的时间内完成。理想情况下,系统不应该在某个时间点看到正在进行的副本,它要么看到文件的旧版本,要么看到新版本;它在任何时候都不会看到文件 A 的旧版本,而是文件 B 的新版本。如果这不完全可能,那么它应该不会超过几毫秒。
我的想法是有类似双缓冲的东西:我在一个暂存区准备好所有东西,例如,_tree_x
然后将它复制移动到tree_x
应该是一个原子操作,它只是改变磁盘上的指针。
我认为单个这样的复制移动操作在 linux 中是原子的(不是吗?),但我也需要几个这样的操作是原子的;我希望将它们视为单次移动操作。