Sauvegarde de dossier + base de données - Python
-
22-09-2019 - |
Question
Je me sens comme cela est assez délicat,
J'ai divers dossiers cinque projets que je voudrais sauvegarder dans un fichier zip / tar, mais je voudrais éviter de sauvegarder des fichiers tels que pyc les fichiers et les fichiers temporaires.
J'ai aussi un Postgres db je sauvegarder.
Les conseils pour l'exécution de cette opération comme un script python?
En outre, y aurait-il de toute façon à arrêter le processus à partir de ressources monopolisant dans le processus?
L'aide serait très apprécié.
La solution
Si vous êtes sous Linux (ou toute autre forme d'Unix, comme MacOSX), un moyen simple de réduire la priorité d'un processus - et donc, indirectement, sa consommation de CPU si d'autres processus veulent certains - est le belle commande . En Python (même les systèmes d'exploitation), os.nice permet à votre programme « se faire mieux » (réduire la priorité et c).
Pour la sauvegarde d'un DB PostgreSQL, je recommande propres outils de PostgreSQL ; pour passer comme un éclair un dossier à l'exception des fichiers pyc (et les fichiers temporaires - mais il est vous identifiez les), Python est tout à fait approprié. Par exemple:
>>> os.chdir('/tmp/az')
>>> f = open('/tmp/a.zip', 'wb')
>>> z = zipfile.ZipFile(f, 'w')
>>> for root, dirs, files in os.walk('.'):
... for fn in files:
... if fn.endswith('.pyc'): continue
... fp = os.path.join(root, fn)
... z.write(fp)
...
>>> z.close()
>>> f.close()
>>>
zips tous les fichiers dans ledit sous-arbre, sauf ceux qui se terminent en .pyc
(sans compression - si vous voulez la compression, ajoutez un troisième argument zipfile.ZIP_DEFLATED
à l'appel zipfile.ZipFile
). Pourrait difficilement être plus facile.
Autres conseils
Sur linux, vous pouvez utiliser tar avec l'option --exclude
. Par exemple, pour exclure vos fichiers .pyc
et fichiers temporaires (dans cet exemple, .tmp
)
$ tar zcvf backup.tar.gz --exclude "*.tmp" --exclude "*.pyc"
utilisez l'option z
pour zipper ainsi.
Avec multi-cœurs d'aujourd'hui CPUs, vous pouvez constater que cpu n'est pas le goulot de la bouteille. Il est maintenant beaucoup plus probable à l'E / S disque qui doit être mieux partagée.
Linux a la commande ionice pour vous permettre de contrôler ce
ionice (1)
NOM
ionice - get/set program io scheduling class and priority
SYNOPSIS
ionice [[-c class] [-n classdata ] [-t]] -p PID [PID ...] ionice [-c class] [-n classdata ] [-t] COMMAND [ARG ...]
DESCRIPTION
Ce programme définit ou obtient la classe de planification io et la priorité pour une programme. Si aucun argument ou tout simplement -p est donné, ionice interrogera la programmation actuelle io pour la classe et priorité processus.
La sauvegarde est au moins autant sur l'importance de reprise en utilisant tous les secours que vous faites.
La bonne façon de sauvegarder le code source est conserver les fichiers source dans un (système de contrôle de version) VCS et sauvegarder le référentiel VCS. Exclure tous les fichiers facilement remplacés générés automatiquement (comme les fichiers *.pyc
, etc.) à partir du référentiel VCS. Je recommande Bazaar pour le stockage et la convivialité très efficace, mais votre équipe sera probablement déjà un VCS qu'ils préfèrent .
Pour la sauvegarde d'une base de données PostgreSQL, il est préférable d'utiliser pg_dump
vider régulièrement la base de données dans un fichier texte , compresser que, et sauvegarder le résultat. En effet, la sauvegarde devient alors restituables sur une machine, en re-jouer la décharge de base de données dans un autre serveur PostgreSQL.
En ce qui concerne la façon de l'automatiser. Vous seriez mieux à l'aide d'un programme Bash dans le but, car il est juste une question de relier certaines commandes à des fichiers, ce qui est ce que la coquille excelle à