#!/bin/bash # Auteur : Belgotux # Site : www.monlinux.net # Adresse : belgotux@monlinux.net # Version : 1.0.2 # Date : 05/03/2012 # Description : #Arguments # backupDataLocalRdiff localhistorybackup | localhistoryverify # for crontab # 30 1 * * * root [ -x /root/backupDataLocalRdiff.sh ] && /root/backupDataLocalRdiff.sh localhistorybackup # 01 6 1 * * root [ -x /root/backupDataLocalRdiff.sh ] && /root/backupDataLocalRdiff.sh localhistoryverify error_report=root mail_report=root folderBackup="/data/clone-ftp /root" #dossiers à sauvegarder en chemin absolu sans / à la fin foldersExcluded="/data/perso/test" logFile="" formatDate="%Y-%m-%d %H:%M:%S" #obligatoire rdiffbackupRemovePeriod="3M" # obligatoire période rdiffbackup pour faire un clean des vieilles backups ( si full 1mois et remove 3 mois, on garde en fait 4 mois (car regarde la date du dernier incrémental donc 1 de plus)) #Variables sauvegarde local dossierDistantLocal="/data/backup" #Variables définies if [ "$logFile" == "" ] ; then logFile="/var/log/$(basename $0 .sh).log" ; fi ### Fonctions ### function rdiffbackupLocal { echo -e "Backups incrémentales Rdiff-backup en cours..." cptResult=0 flagError=0 while read i ; do echo -e "\n\n\n- dossier en cours : $i" #test répertoire vide if [ $(ls -a "$i"|wc -l) = 2 ] ; then echo " !Erreur : répertoire $1 vide!" flagError=1 verif=1 else # (rdiffbackup chemin absolut) excluded="$foldersExcluded" folderDestination=$(basename "$i") #dossier destination = nom du dossier local echo -e "$excluded" | rdiff-backup --print-statistics --exclude-filelist-stdin "$i" ${dossierDistantLocal}/"$folderDestination" && \ rdiff-backup --print-statistics --remove-older-than "$rdiffbackupRemovePeriod" --force ${dossierDistantLocal}/"$folderDestination" verif=$? if [ "$verif" != 0 ] ; then echo " !Erreur synchronisation dossier $i" flagError=1 else echo " Synchronisation terminée du dossier $i" fi fi tabResultRdiffbackupLocal[$cptResult]="$verif" cptResult=$(($cptResult+1)) done < <( echo -e "$folderBackup" ) if [ $flagError == 0 ] ; then return 0 else return 1 fi } function rdiffbackupVerifyLocal { echo -e "Check Rdiff-backup en cours..." cptResult=0 flagError=0 while read i ; do echo -e "\n\n\n- dossier en cours : $i" folderDestination=$(basename "$i") #dossier destination = nom du dossier local rdiff-backup --print-statistics --test-server --list-increment-sizes ${dossierDistantLocal}/"$folderDestination" verif=$? if [ "$verif" != 0 ] ; then echo " !Erreur check dossier $i" flagError=1 else echo " Check du dossier $i" fi tabResultRdiffbackupLocal[$cptResult]="$verif" cptResult=$(($cptResult+1)) done < <( echo -e "$folderBackup" ) if [ $flagError == 0 ] ; then return 0 else return 1 fi } ############### Main ############### case "$1" in localhistorybackup) if [ "$dossierDistantLocal" != "" ] ; then rdiffbackupLocal returnRdiffbackupLocal=$? #gestion erreurs if [ $returnRdiffbackupLocal != 0 ] ; then mailBody=$(echo -e "\nErreur : RdiffbackupLocal=$returnRdiffbackupLocal") cpt=0 while read i ; do if [ "${tabResultRdiffbackupLocal}" = "" ] || [ ${tabResultRdiffbackupLocal[$cpt]} != 0 ] ; then mailBody+=$(echo -e "\n $i : ${tabResultRdiffbackupLocal[$cpt]}") fi cpt=$(($cpt+1)) done < <( echo -e "$folderBackup" ) echo $(date +"$formatDate")" Erreur : RdiffbackupLocal=$returnRdiffbackupLocal" >> $logFile echo "$mailBody" | mail -s "$(hostname -f) erreur backup rdiffbackup" $error_report fi if [ $returnRdiffbackupLocal != 0 ] ; then exit 1 else echo "" echo -e "opération terminée" echo "" echo -e "Backup rdiffbackup réussie" | mail -s "$(hostname -f) backup rdiffbackup reussie" $mail_report fi else echo -e "\nErreur : Paramètres manquants" | mail -s "$(hostname -f) erreur backup rdiffbackup" $error_report exit 1 fi ;; localhistoryverify) if [ "$dossierDistantLocal" != "" ] ; then rdiffbackupVerifyLocal | mail -s "$(hostname -f) résumé du mois rdiffbackup " $mail_report fi ;; *) echo "Aide :" echo "$(basename $0) localhistorybackup | localhistoryverify" echo "" exit 0 ;; esac echo $(date +"$formatDate")" opération terminée" >> $logFile exit 0