#!/bin/bash #Read the backup folders from the config script outside the git repo . $1 #Example script #declare -A backup_folders #backup_folders["/opt/SourceFolderA"]="opt/backup/folderA" #backup_folders["/opt/SourceFolderB"]="opt/backup/folderB" #Configuration logPath=/home/sebastian/ARCHIVE/sebastian/3000_BACKUP/ logFileName="$(date +'%Y-%m-%d_%H-%M')_backupjobs.log" tmpLogFilePath=/tmp/tmp_backup.log retryAttempts=2 #Delete logs older than rotationDays rotationDays=14 #Variables globalErrors=0 logFilePath="${logPath}${logFileName}" touch $tmpLogFilePath touch $logFilePath echo $logFilePath #Terminate if the last backup has not finished yet if pidof -o %PPID -x "$0" > /dev/null; then echo "Backup job already running. Exiting..." exit fi echo "Starting backup job(s)" | tee $tmpLogFilePath for sourceFolder in "${!backup_folders[@]}" do mkdir -p ${backup_folders[$sourceFolder]} while [ "$retryAttempts" -ge "0" ] do echo "Starting Job" | tee -a $tmpLogFilePath echo "SRC: ${sourceFolder}" | tee -a $tmpLogFilePath echo "DEST: ${backup_folders[$sourceFolder]}" | tee -a $tmpLogFilePath date | tee -a $tmpLogFilePath #SSH Host settings need to be set in the ssh client config! rsync --delete --out-format="%t %f %''b" -avz $sourceFolder ${backup_folders[$sourceFolder]} | tee -a $tmpLogFilePath 2>&1 rsyncExitCode=$? echo "Ending backup job" | tee -a $tmpLogFilePath date | tee -a $tmpLogFilePath echo "" | tee -a $tmpLogFilePath if [ $rsyncExitCode -eq 0 ]; then break else echo "Error: rsync exited with code $rsyncExitCode. Retrying..." | tee -a $tmpLogFilePath retryAttempts=$((retryAttempts-1)) globalErrors=$((globalErrors+1)) fi done done #copy over and delete older logs cat $tmpLogFilePath > $logFilePath find $logPath -type f -mtime +$rotationDays -name '*.log' -execdir rm -- '{}' \; #Mail Notifications if [ $globalErrors -eq 0 ]; then #send mail for success echo -e "To:mail@sebastianvendt.de\nFrom:Sebastian@manaslu.home\nSubject:Backup SUCCESSFUL on $(date +'%c')\n\n$(cat $tmpLogFilePath)" | sendmail mail@sebastianvendt.de else #send mail for failure echo -e "To:mail@sebastianvendt.de\nFrom:Sebastian@manaslu.home\nSubject:Backup FAILED on $(date +'%c')\n\n$(cat $tmpLogFilePath)" | sendmail mail@sebastianvendt.de fi #delete tmp file rm $tmpLogFilePath