#!/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin # Script BackupSamba.sh V3.1, écrit par Darkeyes #V3.2 Correction de l'erreur rsync set time pour les partage Windows #V3.1 correction chemin backup/log pour apache & nginx, ajout de l'exclusion "/mnt" du rsync, ajout de la date d'exécution du script dans la commande du retour #V3 Refonte du script: # -Simplification des arguements, # -Controle des dépendences, # -Ajout de l'option de supression de fichiers de plus de x jours #V2.2 Ajout du contrôle d'execution rsync et changement du renvoi Erreur au lieu de ko #V2.1 correction bug sur chemin avec espace #V2 ajout d'une configuration spécifique à la freebox ################ Utilisation ################ # # Ce script permet de faire une copie récursive d'un dossier vers un lecteur samba et supprimer les fichiers de plus de x jours # L'argument -a permet l'ecécution du script en lui même # L'argument -i permet de controler la bonne exécution du script coté shell en créant un fichier log et en retournant OK ou Erreur # L'argument -n permet de controler la bonne exécution du script coté shell sans créer de fichier de log et en retournant OK ou Erreur # L'argument -b permet de définir le dossier backup de jeedom comme source, si autre répertoire mettre le chemin # Si vous ne mettez pas de nombre de jour les fichiers ne seront pas supprimés # utilisation : BackupSamba.sh $1 $2 $3 $4 $5 $6 $7 # exemple : BackupSamba.sh -a IP NomDuPartage User Pwd -b NbJourRétention # le fichier de log ce trouvre dans l'onglet logs de Jeedon # ############################################## ## Définition des variables passées au script Type=$1 Hostname=$2 Share=$3 UserShare=$4 PwdShare=$5 BkpDir=$6 BkpTime=$7 MountDir="/mnt/BackupSamba" ## Définition des fonctions du script function WEBSRV_TCHECK() # Vérifie si apache ou nginx est installé # Définie le dossier Log { ls /etc/init.d/ | grep -q apache2 if [ $? -eq 0 ] ; then WebSrv="apache2" LogDir="/var/www/html/log/script_BackupSamba" else WebSrv="nginx" LogDir="/usr/share/nginx/www/jeedom/log/script_BackupSamba" fi } function LOGICIEL_TCHECK() # Contrôle la présence des dépendances du script { Logiciel=$1 echo "-- Contrôle de la présence de $Logiciel: --" Tcheck=$(dpkg -l | grep $Logiciel | awk '{print $1;}') if [ -z "$Tcheck" ] || [ $Tcheck != "ii" ]; then echo "=> Installation de $Logiciel " echo sudo timeout -k 1m 30s apt-get update 2>&1 > /dev/null sudo apt-get -y --force-yes install $Logiciel if [ $? -gt 0 ] ; then echo "-- ERREUR!! Échec d'installation de $Logiciel --" echo else echo "=> Installation de $Logiciel réussie " echo fi else echo "=> $Logiciel est bien installé " echo fi } function DIR_TCHEK() # Vérification de la présence de l'arborécence /mnt/BackupSamba et création si absent { MountDir=$1 test -d /mnt/BackupSamba/ if [ $? -eq 1 ] ; then sudo mkdir $MountDir fi } function DELETE_FILES() # Supression des fichiers de plus de x jours { MountDir=$1 BkpTime=$2 echo echo "-- Anciens fichiers supprimés: --" sudo find $MountDir -type f -mtime +$BkpTime -exec /bin/rm -vf {} \; if [ $? -gt 0 ] ; then echo echo "-- Nombres de jours de rétentions: $BkpTime --" echo echo "-- ERREUR!! Sur la commande de supression des anciens fichiers :( --" else echo echo "-- Vérification du lecteur: --" sudo df -h | grep $MountDir echo echo "-- Fin de Sauvegarde --" fi } function NOLOG() # Supprime le fichier si l'on ne veut pas de logs { LogDir=$1 Tchek=$(sudo awk 'END {print}' $LogDir) if [[ $Tchek == "-- Fin de Sauvegarde --" ]]; then echo OK `date +%d-%m_%H:%M` else echo Erreur `date +%d-%m_%H:%M` fi sudo rm $LogDir } function SCRIPT_TCHECK() # Contrôle la bonne exécution du script, renvoi ok si tout est bon sinon Erreur { Tchek=$(sudo awk 'END {print}' $LogDir) if [[ $Tchek == "-- Fin de Sauvegarde --" ]]; then echo OK `date +%d-%m_%H:%M` else echo Erreur `date +%d-%m_%H:%M` fi } ########################################## ## Début du Script ########################################## WEBSRV_TCHECK if [[ $Type == "-a" ]] then if [[ $BkpDir == "-b" ]] then # Définie le dossier backup en fonction du serveur WEB if [[ $WebSrv == "apache2" ]] then BkpDir="/var/www/html/backup/" else BkpDir="/usr/share/nginx/www/jeedom/backup/" fi fi ( echo echo "###########################################" echo "## ##" echo "## Sauvegarde du : `date +%d-%m-%Y_%H-%M-%S` ##" echo "## ##" echo "###########################################" echo LOGICIEL_TCHECK cifs-utils LOGICIEL_TCHECK rsync DIR_TCHEK $MountDir # Contrôle l'absence de lecteur monté sur /mnt # Si ok monte le partage sinon stop le script mount | grep -q $MountDir if [ $? -eq 1 ] ; then # Vérifie s'il s'agit d'une freebox if [[ $UserShare == "freebox" ]] then sudo mount -t cifs //$Hostname/"$Share" $MountDir -o user=$UserShare,password=$PwdShare,uid=1000,gid=1000,rw,sec=ntlm else sudo mount -t cifs //$Hostname/"$Share" $MountDir -o user=$UserShare,password=$PwdShare fi # Contrôle que le lecteur est bien monté if [ $? -eq 0 ] ; then echo "-- Fichiers copiés: --" sudo rsync -rltvz --omit-dir-times --exclude="/mnt" "$BkpDir" $MountDir # Contrôle de la bonne exécution de la commande rsync if [ $? -gt 0 ] ; then sudo umount $MountDir echo echo "-- ERREUR!! De la commande rsync :( --" else if [ -z "$BkpTime" ]; then echo echo "-- Vérification du lecteur: --" sudo df -h | grep $MountDir echo echo "-- Fin de Sauvegarde --" else DELETE_FILES $MountDir $BkpTime fi sudo umount $MountDir fi else echo "-- ERREUR!! Le montage de $Hostname/"$Share" a échoué :( --" fi else echo "-- ERREUR!! Un lecteur est déjà monté sur /mnt vérifier et relancer le script --" fi ) >> $LogDir 2>&1 elif [[ $Type == "-n" ]]; then NOLOG $LogDir elif [[ $Type == "-i" ]]; then SCRIPT_TCHECK fi exit 0