Cette question concerne le déploiement d'applications web.
Intro (vous pouvez sauter)
J'utilise django, et la façon dont mon hébergeur a configuré son support pour django fait que la webapp est dispersée dans au moins trois endroits :
- Le code d'application réel dans
/something/<my_apps>/
- Paramètres du site/urls/templates en
/something/<my_site>/
- css, javascript, et autres "médias" en
/something_else/media/
Ainsi, lorsque je déploie/mets à jour le site Web, je dois mettre à jour plusieurs répertoires à la fois.
Question réelle :
Existe-t-il un moyen de faire une copie de fichier atomique ? Je ne suis en aucun cas un "expert" des systèmes linux, alors pardonnez mon ignorance.
L'opération de copie impliquait plusieurs arborescences de répertoires, soit deux ou trois, en gros :
copy _tree1 to tree1
copy _tree2 to tree2
Par atomique, je veux dire :
- C'est soit entièrement copié, soit pas copié du tout. Il ne devrait jamais être dans un état de quelque chose de copié mais quelque chose de raté.
- C'est fait dans le plus court laps de temps possible. Idéalement, il ne devrait y avoir aucun moment où le système voit la copie en cours, il voit soit l'ancienne version des fichiers, soit la nouvelle version ; à aucun moment il ne verra l'ancienne version du fichier A mais la nouvelle version du fichier B. Si cela n'est pas tout à fait possible, alors cela ne devrait pas prendre plus de quelques milli secondes.
Mon idée est d'avoir quelque chose comme une double mise en mémoire tampon : Je prépare tout dans une zone de transit, par exemple, _tree_x
et ensuite copie le déplacer vers tree_x
avec devrait être une opération atomique qui change simplement les pointeurs sur le disque.
Je pense qu'un seul de ces copie L'opération move est atomique sous linux (n'est-ce pas ?), mais j'ai besoin que plusieurs opérations de ce type soient également atomiques ; je veux qu'elles soient traitées comme s'il s'agissait d'une seule opération move.