Un script en python pour vérifier ses sauvegardes
Introduction
J'ai profité du besoin de réécriture de ce script pour m'itinier à python. Plutôt que du script shell tout bête ou du perl tout illisible, je me suis dit qu'il serait intéressant de jetter un oeil à python.
Le besoin est assez simple :
j'ai deux PC sous linux qui stockent des fichiers et qui se sauvegardent en croisé (via d'autres scripts déjà écrits ; vu la simplicité et la puissance de python, je m'amuserais peut-être à les réécrire à l'occasion).
Prenons par exemple le serveur 1, le script de sauvegarde qui tourne dessus copie son fichier sur le serveur 2 et s'arrange pour garder n générations.
Mon inquiétude (et donc ce que j'ai envie de vérifier) c'est que ce script de sauvegarde s'execute mal ou encore que la copie du serveur 1 vers le serveur 2 plante en plein milieu.
Mon but est donc de faire tourner localement sur le serveur 2 un script qui va vérifier que les sauvegardes sont bien présentes, de la bonne date et de la bonne taille.
Je suis désolé si vous autres experts de python trouvent ce script complètement horrible, ne respectant pas la phylosophie de python ou que sais-je. C'est mon premier script python et m'a permis de découvrir globalement ses possibilités, et je dois dire que je suis plutôt enthousiaste car c'est un langage a la fois simple et puissant.
Fonctionnalités
Vérification de la présence du fichier de sauvegarde :
Pour chaque sauvegarde à vérifier, je voulais pouvoir en contrôler sa présence, sa fraicheur, ainsi que sa taille.
Comme beaucoup de sauvegardes, mes fichiers backups ont une date/heure dans leur nom, j'ai donc choisit d'utiliser les expressions régulières pour essayer de trouver mes sauvegardes :
Imaginons que dans le répertoire /home/backups, nous avons les fichiers suivants :
- sav_serveur1_MesSitesWebs_20061226200232.tar.gz
- sav_serveur1_MesSitesWebs_20061227200227.tar.gz
- sav_serveur1_MesSitesWebs_20061228200335.tar.gz
Dans le programme, je vais donc lui dire de vérifier, dans le répertoire /home/backups (par exemple) les fichiers du type '.*MesSitesWebs.+\.tar\.gz'
Ensuite, je passe simplement 3 paramétres supplémentaires : un pour la vérification de la date et deux pour la taille :
Vérification de la date :
Le principe est qu'il faut trouver au moins un fichier sauvegardé dont la date est dans l'intervalle 'acceptable' de sauvegarde. J'ai défini des intervalles journalières, hebdo, mensuelles ou annuelles.Prenons par exemple journalière ('d') : si le vérificateur ne trouve pas de fichier (dont le nom correspond à l'expression régulière bien sûr et) dont la date de modification est inférieure aux 24 dernières heures, alors le test échoue et une erreur est remontée.
Vérification de la taille :
le premier paramètre est la taille de comparaisonle second est le type de comparaision :
- 'eq' : la taille du fichier doit être exactement la même que la taille de comparaison
- 'sup' : la taille du fichier doit être plus grande que la taille entrée en paramètre (c'est souvent le cas pour une archive qui grossit un peu chaque jour)
- 'inf' : la taille du fichier doit être plus petite que la taille entrée en paramètre
Vérifications multiples :
Dans la fonction main(), il est possible d'enchaîner plusieurs vérifications de suite (en copiant/collant un bloc de vérification et en modifiant les paramètres appropriés)
Envoi d'un email en cas d'échec :
En cas d'échec d'au moins une des vérifications, un email sera envoyé au destinataire paramétré avec le détail des erreurs rencontrées.
Personnalisation du script :
La quasi totalité de la personnalisation est dans la fonction main() :
ajouter / modifier les blocs de vérifications et en mettre autant que souhaité (mais au moins 1 bien sûr).
exemple d'un bloc :
# Check d'un fichier backupé
TmpIsOk, TmpTexte = VerifFilesInDirectory('/home/backups/', '.*_BACKUP_MYSQL.+\.tar\.gz', 'd', 1600000, 'sup')
if TmpIsOk == -1:
EmailTexte = EmailTexte + "\\n" + TmpTexte + "\\n"
Personnaliser l'envoi d'email :
Il faut simplement changer les paramètres de l'appel de la fonction SendEmail :
SendEmail('admin@example.com', 'dest@domain.com', 'PB de SAUVEGARDE', EmailTexte, 'localhost')
- La première adresse est l'adresse de l'expéditeur
- La seconde celle du destinataire
- Le troisième paramètre est l'objet du mail
- Le quatrième doit être laissé tel quel, c'est le texte contruit par les vérifications de fichiers
- Le dernier est l'adresse du serveur smtp, il peut être local comme dans l'exemple ou celui de votre isp (smtp.monisp.fr par exemple)
Télécharger l'archive
| Filename | Filesize | Date | |
|---|---|---|---|
| . verifbackups-demo_v0.1beta.zip | 2.58 kB | 2008-08-11 | |
Crédits et liens
Pour découvrir python, j'ai parcouru un certains nombre de sites très bien faits, dont voici un aperçu :- Introduction à Python chez P3B
- Le livre 'plongez au coeur de python'
- La référence officielle
- L'index officiel des modules
Ecrivez un commentaire
- Les champs obligatoires sont marques d'une *.
![[-]](assets/templates/perso/images/fleche_haut.gif)
![[+]](assets/templates/perso/images/fleche_bas.gif)
![[RSS]](assets/templates/perso/images/rss.gif)
![[RSS]](assets/templates/perso/images/rss_small.gif)
Posts: 1
Reply #2 on : Sat December 30, 2006, 01:46:46