#! /bin/bash ### GENERAL SETTINGS ### DEBUG="true" #don't send mail if in debug mode timestampFolder="index" #folder for reading timestamp backupFolder="/mnt/hdd/backups/" #directory that contains all repos ######################## ### eMail ### receiverEmail="localhorst@mosad.xyz" senderEmail="______________@mosad.xyz" ######################## ######### REPO SETTINGS ######### repos_name[0]="Name" repos_directory[0]="path" repos_interval[0]=21600 #sec repos_interval_tolerance[0]=10 #% #repos_name[1]="another backup repo" #repos_directory[1]="another_repo" #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

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 -f $senderEmail -t $receiverEmail -sub "AutoBackup Failure ${repos_name[i]}" -smtp mail.emailserver.science -port 587 -starttls -auth -user autobackupwatchdog@mosad.xyz -pass "__PW_DB__" -cs "utf-8" -mime-type "text/html" -msg-body "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

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 -f $senderEmail -t $receiverEmail -sub "AutoBackup Failure ${repos_name[i]}" -smtp mail.emailserver.science -port 587 -starttls -auth -user autobackupwatchdog@mosad.xyz -pass "__PW_DB__" -cs "utf-8" -mime-type "text/html" -msg-body "mail_content.txt" rm mail_content.txt #/etc/init.d/alarm start fi fi done echo " " echo "Finished"