#!/bin/bash # on verifie que l'utilisateur du script soit bien "root" # sinon arret du script if [[ $EUID -ne 0 ]]; then echo "Vous devez être root." 1>&2 exit 1; fi # on récupère la date et l'heure actuelles # sous plusieurs formats utilisables plus tard BACKUP_DAY=$(date +'%F') NOW="$(date)" DATE=$(date +'%F_%H%M%S') # on definit ensuite les dossiers qui vont etre utilisés # dossier à sauvegarder DIR_TO_BACKUP="/var/www/www.mywebsite.com/htdocs" # dossier qui contient toutes les sauvegardes BACKUP_ROOT_DIR="/var/www/www.mywebsite.com/backups/roulement" # dossier de destination de la sauvegarde avec la date du jour BACKUP_DIR="${BACKUP_ROOT_DIR}/${BACKUP_DAY}" # fichier de log (pour garder une trace de l'etat des sauvegardes) LOG_FILE="/var/www/www.mywebsite.com/log/backup.log" # on vérifie si le dossier à sauvegarder existe bien # sinon arret du script [ ! -d ${DIR_TO_BACKUP} ] && exit 1 # on vérifie si le dossier de sauvegarde existe bien # sinon on le crée [ ! -d ${BACKUP_DIR} ] && mkdir -p ${BACKUP_DIR} # on vérifie si le fichier de logs existe déjà # sinon on le crée [ ! -f ${LOG_FILE} ] && touch ${LOG_FILE} # on construit maintenant le nom du fichier de sauvegarde avec la date et l'heure TAR_FILE="${BACKUP_DIR}/mywebsite-${DATE}.tgz" # c'est parti pour la sauvegarde # on ecrit l'info dans le fichier de log echo "================================== [${NOW}] > Début" | tee -a ${LOG_FILE} # on se déplace vers le dossier à sauvegarder cd ${DIR_TO_BACKUP} # on compresse le dossier tar czf ${TAR_FILE} . # on revient dans le dossier dans lequel on était # mais sans affichier le résultat cd - > /dev/null # on ecrit l'info dans le fichier de log # le nom du fichier compressé et sa taille echo "[$(date)] > TAR file: ${TAR_FILE} : $(du -sh ${TAR_FILE}) " | tee -a ${LOG_FILE} # si on a plus de deux sauvegardes on supprime la plus ancienne for i in $(ls -1t ${BACKUP_ROOT_DIR} | tail -n +3); do rm -vrf ${BACKUP_ROOT_DIR}/${i} # on écrit l'info dans le fichier de log echo "[$(date)] > Suppression de: ${i}" | tee -a ${LOG_FILE} done # on envoie la dernière sauvegarde vers le serveur ftp # mais avant on définit les variables de connexion # le login et le pass sont définis dans le fichier /root/.netrc HOST="dedibackup-dc3.online.net" LOGIN="auto" PASSWORD="auto" EXCLUDED="*.*~" # commande ftp lftp -c "set ftp:list-options -a; open ${HOST}; lcd ${BACKUP_DIR}; cd backups; mirror --reverse \ --delete-first \ --verbose \ --exclude-glob $EXCLUDED"; # on écrit l'heure de fin dans le fichier de log echo "[$(date)] > Fin" | tee -a ${LOG_FILE}