#!/bin/bash # Didier le 14 Septembre 2022 # # TODO : Inclure un script post et pre. # ##################################################### #KAZ_ROOT=$(cd "$(dirname $0)"/..; pwd) KAZ_ROOT="/kaz" . $KAZ_ROOT/bin/.commonFunctions.sh setKazVars . $DOCKERS_ENV . $KAZ_ROOT/secret/SetAllPass.sh VERSION="1.0" PRG=$(basename $0) RACINE=$(echo $PRG | awk '{print $1}') IFS=' ' # ##################################################### MAILSOURCE="sauve@kaz.bzh" VOLUME_SAUVEGARDES="/mnt/backup-nas1" #SAUVE_REPO=${VOLUME_SAUVEGARDES}/SauveRepo SAUVE_REPO=admin@nas-kaz1:/share/Backup/SauveRepo MAIL_RAPPORT="didier@kaz.bzh;francois@kaz.bzh;fab@kaz.bzh;fanch@kaz.bzh" ##################################################### SCRIPTLOG="/mnt/disk-nas1/log/${PRG}-$(date +%d-%m-%Y-%H-%M-%S).log" FICLOG="/var/log/${PRG}.log" ##################################################### # - la liste des repertoires à sauver séparés par un espace LISTREPSAUV="/var/lib/docker/volumes /kaz" ##################################################### # - Les sauvegardes à garder jour, semaines, mois NB_BACKUPS_JOUR=15 NB_BACKUPS_SEM=8 NB_BACKUPS_MOIS=12 ##################################################### # Recevoir un mail quand la sauvegarde est OK ? MAILOK=true ##################################################### trap 'LogFic "script stoppé sur un SIGTERM ou SIGINT" >&2; exit 2' INT TERM LogFic() { [ ! -w ${FICLOG} ] && { echo "Probleme d' ecriture dans $FICLOG" ; exit 1 ;} echo "$(date +%d-%m-%Y-%H-%M-%S) : $1" >> ${FICLOG} } # ExpMail() { MAIL_SOURCE=$1 MAIL_SUJET=$2 MAIL_DEST=$3 MAIL_TEXTE=$4 docker exec -i mailServ mailx -a 'Content-Type: text/plain; charset="UTF-8"' -r ${MAIL_SOURCE} -s "${MAIL_SUJET}" ${MAIL_DEST} << EOF ${MAIL_TEXTE} EOF } Sauvegarde() { #$1 est le repertoire à sauver, on créé le sous repertoire dans le repo CODE_TMP="" if [ -r $1 ] then echo "Sauvegarde $1" >>${SCRIPTLOG} #mkdir -p ${SAUVE_REPO}/$1 >/dev/null 2>&1 #rdiff-backup --verbosity 3 $1 ${SAUVE_REPO}/$1 >>${SCRIPTLOG} 2>>${SCRIPTLOG} rsync -aAHXh --del --stats --exclude 'files_trashbin' $1 ${SAUVE_REPO} >>${SCRIPTLOG} 2>>${SCRIPTLOG} CODE_TMP=$? else LogFic "$1 n' existe pas ou n' est pas accessible en lecture" CODE_TMP=1 fi LogFic "Code Retour de la sauvegarde de $1 : ${CODE_TMP}" BACKUP_EXIT=$(expr ${BACKUP_EXIT} + ${CODE_TMP} ) } # Purge() { echo "Commande prune de rdiff-backup" PRUNE_EXIT=$? } # ****************************************************** Main ******************************************************************* # Création du fichier de log touch ${FICLOG} # LogFic "#########################################################################################################################" LogFic " *************** ${PRG} Version ${VERSION} ***************" LogFic "#########################################################################################################################" # test si les variables importantes sont renseignées et sortie si tel n' est pas le cas if [ -z "${VOLUME_SAUVEGARDES}" ] || [ -z "${SAUVE_REPO}" ] then echo "VOLUME_SAUVEGARDES et SAUVE_REPO à verifier" LogFic "VOLUME_SAUVEGARDES et SAUVE_REPO à verifier" LogFic "Sortie du script" exit 1 fi ##################################################################################################################################################### ################### Mise en commentaire de cette section puisque le repo est en rsync ( voir plus tard comment gérer ça ) # test si le volume de sauvegarde est ok #grep "${VOLUME_SAUVEGARDES}" /etc/mtab >/dev/null 2>&1 #if [ "$?" -ne "0" ] #then # echo "le volume de sauvegarde ${VOLUME_SAUVEGARDES} n' est pas monté" # LogFic "Erreur de montage du volume ${VOLUME_SAUVEGARDES} de sauvegarde" # exit 1 #fi # Test si j' ai le droit d' écrire dans le Repo # [ ! -w ${SAUVE_REPO} ] && { echo "Verifier le droit d' écriture dans ${SAUVE_REPO}" ; LogFic "Verifier le droit d' écriture dans ${SAUVE_REPO}"; exit 1;} ##################################################################################################################################################### # Tout se passe bien on continue LogFic " - Repertoire a sauver : ${LISTREPSAUV}" #LogFic " - Volume Nfs monté : ${VOLUME_SAUVEGARDES}" LogFic " - Destination des sauvegardes : ${SAUVE_REPO}" LogFic " - Rapport par Mail : ${MAIL_RAPPORT}" #LogFic " - Backups jour : ${NB_BACKUPS_JOUR} , Backups semaines : ${NB_BACKUPS_SEM} , Backups mois : ${NB_BACKUPS_MOIS}" LogFic "#########################################################################################################################" LogFic " - Démarrage de la sauvegarde" LogFic " - Log dans ${SCRIPTLOG}" BACKUP_EXIT=0 PRUNE_EXIT=0 for REPS in ${LISTREPSAUV} do LogFic "Sauvegarde de ${REPS}" Sauvegarde ${REPS} done LogFic "Code retour compilé de toutes les sauvegardes : ${BACKUP_EXIT}" ################################## a gérer plus tard #LogFic " - Démarrage du nettoyage des sauvegardes" #Purge #LogFic " - Code retour du Nettoyage des sauvegardes (0=OK; 1=WARNING, 2=ERROR) : ${PRUNE_EXIT}" # ######################################################################################## # On teste le code retour de la sauvegarde, on log et on envoie des mails case "${BACKUP_EXIT}" in '0' ) IFS='' MESS_SAUVE_OK=" Salut La sauvegarde est ok, ce message peut être enlevé avec la variable MAILOK=false Que la force soit avec toi Ton esclave des sauvegardes" LogFic " - la sauvegarde est OK" [ "$MAILOK" = true ] && ExpMail ${MAILSOURCE} "Sauvegarde Ok" ${MAIL_RAPPORT} ${MESS_SAUVE_OK} IFS=' ' ;; * ) IFS='' MESS_SAUVE_ERR=" Salut La sauvegarde est en Erreur Le log à consulter est ${SCRIPTLOG} Code retour de la Sauvegarde ( code Rsync ): ${BACKUP_EXIT} Ton esclave des sauvegardes" LogFic " - !!!!! Sauvegarde en Erreur !!!!!" ExpMail ${MAILSOURCE} "!!!! Sauvegarde en Erreur !!!!" ${MAIL_RAPPORT} ${MESS_SAUVE_ERR} IFS=' ' ;; esac LogFic " - Fin de la sauvegarde"