#!/bin/bash # Script de sauvegarde incrémentale d'un dépôt subversion # Il est possible de provoquer une sauvegarde complète en supprimant le dossier version ou son contenu # Paramètres # Chemin du dépôt à sauvegarder pathRepo="/chemin/repository"; # Chemin du dossier de sauvegarde pathBackup="/chemin/dossier/sauvegarde"; # Chemin du dossier pour mémoriser la dernière version sauvegardée pathNumVersion=$pathBackup"/version"; # Chemin du fichier de logs pathLog=$pathBackup"/backup.log"; # Nom du fichier (compris entre la date et l'extension) fileName="backup_svn"; # Format de la date # Pour le nom du fichier dateFileFormat="+%Y%m%d"; # Pour le log dateLogFormat="+%Y-%m-%d %H:%M"; # Vérifications # Vérification de l'existence des dossiers de travail if [ ! -d $pathBackup ]; then echo "Dossier $pathBackup inexistant"; exit 1; fi echo "[$(date "$dateLogFormat")] Début de la sauvegarde" >> $pathLog; # Création du dossier de la version si il n'existe pas if [ ! -d $pathNumVersion ]; then mkdir $pathNumVersion; fi numVersionLastBackup=$(ls $pathNumVersion); if [ "$numVersionLastBackup" = "" ]; then touch "$pathNumVersion/1"; numVersionLastBackup=1; fi if [ $numVersionLastBackup -gt 1 ]; then backupIncremental=" --incremental"; typeBackup="incr"; else typeBackup="full"; fi # Vérification de l'existance du dépôt if ! (svnlook info $pathRepo 2>>$pathLog 1>"/dev/null") ; then echo "[$(date "$dateLogFormat")] ERREUR : Repository $pathRepo inexistant" >> $pathLog; echo "[$(date "$dateLogFormat")] Fin de l'exécution - Sauvegarde non effectuée" >> $pathLog; exit 1; fi # Récupération de la dernière version présente dans le dépôt youngestSvnVersion=$(svnlook youngest $pathRepo); echo "[$(date "$dateLogFormat")] Version la plus récente : $youngestSvnVersion" >> $pathLog; if [ $numVersionLastBackup -gt $youngestSvnVersion ]; then echo "[$(date "$dateLogFormat")] La version la plus récente est la version sauvegardée, la sauvegarde n'est donc pas nécéssaire" >> $pathLog; echo "[$(date "$dateLogFormat")] Fin de la sauvegarde" >> $pathLog; exit 0 fi # Lancement effectif de la sauvegarde if (svnadmin dump -r$numVersionLastBackup:$youngestSvnVersion$backupIncremental $pathRepo 2>>$pathLog | bzip2 > "$pathBackup/$(date "$dateFileFormat")_"$fileName"_"$typeBackup"_"$numVersionLastBackup"_to_"$youngestSvnVersion".svndump.bz2") ; then echo "[$(date "$dateLogFormat")] Mise à jour du numéro de version" >> $pathLog; mv $pathNumVersion/$numVersionLastBackup $pathNumVersion/$(($youngestSvnVersion + 1)); else echo "[$(date "$dateLogFormat")] Erreur lors de la sauvegarde" >> $pathLog; echo "[$(date "$dateLogFormat")] Fin de l'exécution - Sauvegarde non effectuée" >> $pathLog; exit 1; fi echo "[$(date "$dateLogFormat")] Fin de la sauvegarde" >> $pathLog; exit 0