-#! /bin/bash ### GENERAL SETTINGS ### DEBUG="false" #don't send mail if in debug mode timestampFolder="index" #folder for reading timestamp backupFolder="/mnt/hdd/backups/" #directory that contains all repos backupServerName="Onsite Backup" #name of this backup server ######################## ### eMail ### receiverEmail="dummy@gmail.com" senderEmail="dummy@gmail.com" senderPassword="__PW_DB__" mailServer="dummy@gmail.com" ######################## ######### REPO SETTINGS ######### repos_name[0]="CDS Backup" repos_directory[0]="cdsbackup" repos_interval[0]=21600 #sec repos_interval_tolerance[0]=10 #% #repos_name[1]="SDS Backup" #repos_directory[1]="sdsbackup" #repos_interval[1]=21600 #sec #repos_interval_tolerance[1]=10 #% #repos_name[2]="another backup repo" #repos_directory[2]="another_repo" #repos_interval[2]=21600 #sec #repos_interval_tolerance[2]=10 #% ################################# function fn_convertSecondsToHumanReadable() { fn_result="$(echo $(($1/86400))d $(($(($1 - $1/86400*86400))/3600))h:$(($(($1 - $1/86400*86400))%3600/60))m:$(($(($1 - $1/86400*86400))%60))s)" } echo "Starting AutoBackup Watchdog" echo "Local time: $(date)" cd $backupFolder #jump to backup folder that contains the repos repo_count=$(("${#repos_name[@]}")) echo "Repo Count: $repo_count" repo_count=$(($repo_count-1)) for i in $(eval echo "{0..$repo_count}") #loop through all repos do echo " " echo "Checking repo: ${repos_name[i]}" if [ -d "${repos_directory[i]}" ]; then # Take action if ${repos_directory[i]} exists ### cd ${repos_directory[i]} #jump into repo else # Repo doesnt exist echo "Repo ${repos_directory[i]} doesnt exist!" rm -f mail_content.txt cat >> mail_content.txt <

AutoBackup Failure on $backupServerName

Directory for the automatic backup for "${repos_name[i]}" not found

Local time: $(date)

Failed backup repo: ${repos_name[i]}

EOL if [ "$DEBUG" = "false" ]; then mailsend-go -sub "AutoBackup Failure ${repos_name[i]} on $backupServerName" -smtp $mailServer -port 587 auth -user $senderEmail -pass $senderPassword -from $senderEmail -to $receiverEmail body -file mail_content.txt rm mail_content.txt #/etc/init.d/alarm start fi fi timestamp=$(date -r "$timestampFolder" +%s) #get timestap of last backup aka the "index" folder time=$(date +%s) #get local time diff=$(($time-$timestamp)) #compute diff time lastBackup=$(date -d @$timestamp) #convert unix time stamp in human readable tolerance=$(( ${repos_interval[i]}*${repos_interval_tolerance[i]}/100)) #compute tolerance based on percentage total_interval=$((${repos_interval[i]}+$tolerance)) #compute total interval based on (interval+tolerance) cd .. #leave repo echo "Last backup: $lastBackup" if [ "$diff" -gt "$total_interval" ]; then #test if last backup is overdue overdue=$(($diff-${repos_interval[i]})) #stores diff time since last backup in seconds fn_convertSecondsToHumanReadable $overdue # convert in human readable overdue=$fn_result #stores diff time since last backup in human readable fn_convertSecondsToHumanReadable ${repos_interval[i]} #convert planned interval for repo in human readable plannedIntervall=$fn_result #stores the planned interval for repo in human readable echo -e "\e[31mOverdue: $overdue" echo -e "\e[39m " #reset console color to black rm -f mail_content.txt cat >> mail_content.txt <

AutoBackup Failure on $backupServerName

Overdue for the automatic backup for "${repos_name[i]}"

Local time: $(date)

Failed backup repo: ${repos_name[i]}

Planned backup interval: $plannedIntervall

Last backup: $lastBackup

Overdue: $overdue

EOL if [ "$DEBUG" = "false" ]; then mailsend-go -sub "AutoBackup Failure ${repos_name[i]} on $backupServerName" -smtp $mailServer -port 587 auth -user $senderEmail -pass $senderPassword -from $senderEmail -to $receiverEmail body -file mail_content.txt rm mail_content.txt fi fi done echo " " echo "Finished"