linux – 多个目录的原子复制

前端之家收集整理的这篇文章主要介绍了linux – 多个目录的原子复制前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题与Web应用程序的部署有关.

简介(你可以跳过)

我正在使用django,我的托管服务提供商设置他们的django支持的方式最终导致webapp分散在至少三个位置:

> / something /< my_apps> /中的实际应用程序代码
> / something /< my_site> /中的网站设置/网址/模板
> / something_else / media /中的css,javascript和其他“媒体”

所以当我部署/升级网站时,我需要一次更新几个目录.

实际问题:

有没有办法让原子文件复制?我无论如何都不是linux系统的“专家”,所以请原谅我的无知.

复制操作涉及几个目录树,基本上是两个或三个:

copy _tree1 to tree1
copy _tree2 to tree2

原子,我的意思是:

>它要么完全复制,要么根本不复制.它永远不应该处于某种复制状态但有些失败状态.
>这是在尽可能短的时间内完成的.理想情况下,系统在正在进行的过程中看到副本时,应该没有任何时间点,它要么看到旧版本的文件,要么看到新版本;在任何时候它都不会看到文件A的旧版本,而是文件B的新版本.如果这不完全可能,那么它应该不会超过几毫秒.

我的想法是有一些像双缓冲的东西:我在暂存区域准备一切,例如_tree_x,然后将它复制移动到tree_x,应该是一个简单地改变磁盘上指针的原子操作.

我认为单个这样的复制移动操作在linux中是原子的(不是吗?),但是我需要几个这样的操作才是原子的;我希望他们被视为一次移动操作.

解决方法

我认为你在一个临时区域的正确轨道上.我不知道任何原子命令,但如果你暂存你的文件,然后使用脚本删除第一个目录并移动(不复制)第二个目录,并为所有三个目录执行,它应该非常快.

或者,您可能想要使用符号链接.那样你可以大致:

/version/22/<my-apps>
/version/22/<my-site>
/version/22/<my-media>

并使用相同的子目录部署/ version / 23目录.然后,实际文件会去(并且再次,为了速度,你需要一个脚本),你可以使用符号链接,这样当任何人进入最新页面时,他们会获得当前的任何版本(这一切都发生了)透明,他们不知道).这样做的好处是,在您决定删除之前,您的旧工作仍然存在. [虽然,授予,版本控制系统更适合用于保持较旧的工作.]

您必须检查1)您可以运行脚本(以及Web用户不能这样做的方式!),以及2)您可以使用符号链接(因为某些Web服务器配置为不遵循它们.)

猜你在找的Linux相关文章