Script d'automatisation de sauvegarde système
1. Problématique initiale
L'entreprise manquait d'une solution centralisée et légère pour effectuer des sauvegardes régulières des fichiers de configuration réseau et des bases de données. Les sauvegardes existantes étaient déclenchées manuellement par les techniciens, de façon irrégulière, sans vérification de leur intégrité ni traçabilité en cas d'échec. Le besoin exprimé était un outil autonome, capable de tourner sans surveillance humaine et sans impacter la bande passante durant les heures de travail.
2. Analyse & choix techniques
Python a été choisi pour la logique métier (sélection des répertoires, calcul d'empreintes, gestion des erreurs) pour sa lisibilité et sa gestion native des exceptions, complété par des appels Bash pour les opérations système bas niveau (compression, permissions). Crontab a été retenu plutôt qu'un service dédié pour sa simplicité de maintenance par une petite équipe technique.
3. Fonctionnalités développées
- Extraction automatique : récupération quotidienne des répertoires cibles (/etc, /var/www, bases SQL) via une liste de chemins configurable dans un fichier séparé, pour éviter de modifier le script à chaque ajustement du périmètre.
- Compression & archivage : création d'archives horodatées au format .tar.gz, avec un nommage incluant la date et l'heure pour éviter tout écrasement accidentel.
- Contrôle d'intégrité : calcul de l'empreinte SHA-256 de chaque archive immédiatement après création, stockée dans un fichier de contrôle séparé pour détecter toute altération ultérieure du fichier.
- Rétention glissante : suppression automatique des archives de plus de 30 jours pour préserver l'espace disque, avec conservation systématique de la dernière sauvegarde même si elle dépasse ce délai.
- Gestion des erreurs : chaque étape (extraction, compression, calcul d'empreinte) est encadrée par une gestion d'exception qui interrompt proprement le script et consigne la cause exacte de l'échec dans un fichier de log dédié.
- Alerte mail : envoi automatique d'un rapport d'exécution à l'administrateur système, résumant les fichiers sauvegardés, la taille de l'archive générée et un statut clair (succès ou erreur avec détail).
4. Difficultés rencontrées
Le principal défi a été de garantir que le script ne s'exécute jamais partiellement de façon silencieuse : une compression interrompue en cours de route aurait pu laisser une archive corrompue perçue comme valide. La solution a consisté à écrire l'archive dans un répertoire temporaire et à ne la déplacer vers son emplacement final qu'une fois le contrôle d'intégrité validé.
5. Déploiement & suivi
Le script a été intégré dans la crontab du serveur principal pour une exécution nocturne à 02h00, en dehors des heures de forte activité réseau. Il tourne actuellement en production sans interruption depuis sa mise en place, avec un historique de rapports mail permettant de vérifier a posteriori qu'aucune sauvegarde n'a été manquée.
6. Résultat & compétences acquises
Ce projet a permis de passer d'une pratique manuelle et irrégulière à un processus fiable et traçable, sans charge de maintenance pour l'équipe. Il a été l'occasion de manipuler en profondeur la gestion d'erreurs en Python, l'articulation entre scripts Python et commandes système, et la conception d'un outil pensé pour fonctionner sans surveillance humaine.