Restic-Backend-Watchdog/check_AutoBackup.sh

175 lines
5.6 KiB
Bash
Raw Permalink Normal View History

2022-09-01 11:33:56 +02:00
-#! /bin/bash
2020-04-24 23:07:40 +02:00
### GENERAL SETTINGS ###
2022-09-01 11:33:56 +02:00
DEBUG="false" #don't send mail if in debug mode
timestampFolder="index" #folder for reading timestamp
2021-12-26 17:54:40 +01:00
backupFolder="/mnt/hdd/backups/" #directory that contains all repos
2022-09-01 11:33:56 +02:00
backupServerName="Onsite Backup" #name of this backup server
########################
### eMail ###
2022-09-01 11:33:56 +02:00
receiverEmail="dummy@gmail.com"
senderEmail="dummy@gmail.com"
senderPassword="__PW_DB__"
mailServer="dummy@gmail.com"
2020-04-24 23:07:40 +02:00
########################
######### REPO SETTINGS #########
2022-09-01 11:33:56 +02:00
repos_name[0]="CDS Backup"
repos_directory[0]="cdsbackup"
repos_interval[0]=21600 #sec
repos_interval_tolerance[0]=10 #%
2020-04-24 23:07:40 +02:00
2022-09-01 11:33:56 +02:00
#repos_name[1]="SDS Backup"
#repos_directory[1]="sdsbackup"
2020-04-24 23:07:40 +02:00
#repos_interval[1]=21600 #sec
#repos_interval_tolerance[1]=10 #%
2021-12-26 17:54:40 +01:00
#repos_name[2]="another backup repo"
2020-04-24 23:07:40 +02:00
#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
2020-04-24 23:07:40 +02:00
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]}"
2020-12-13 09:49:21 +01:00
2020-12-13 11:20:46 +01:00
if [ -d "${repos_directory[i]}" ]; then
2020-12-13 09:49:21 +01:00
# 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 <<EOL
<head>
<style>
h1{
text-align: center;
font-size: 60;
color: red;
margin: 30px;
}
h2{
font-size: 30;
color: black;
}
div {
margin: 30px;
font-family: "Lucida Console", Courier, monospace;
}
.overdue{
color: red;
}
footer{
margin-top: 9em;
}
</style>
</head>
<body>
2022-09-01 11:33:56 +02:00
<h1>AutoBackup Failure on $backupServerName</h1>
2020-12-13 09:49:21 +01:00
<h2>Directory for the automatic backup for "${repos_name[i]}" not found</h2>
<div>
<p>Local time: $(date)</p>
<p>Failed backup repo: ${repos_name[i]}</p>
</div>
</body>
<footer>
2022-09-01 11:33:56 +02:00
<p>Version: 0.2.3</p>
<p>Author: <a href="mailto:mail@hendrikschutter.com">mail@hendrikschutter.com</a></p>
2020-12-13 09:49:21 +01:00
</footer>
EOL
if [ "$DEBUG" = "false" ];
then
2022-09-01 11:33:56 +02:00
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
2020-12-13 09:49:21 +01:00
rm mail_content.txt
#/etc/init.d/alarm start
fi
fi
2020-04-24 23:07:40 +02:00
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
2020-04-24 23:17:34 +02:00
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
2020-04-24 23:07:40 +02:00
echo -e "\e[31mOverdue: $overdue"
2020-04-24 23:17:34 +02:00
echo -e "\e[39m " #reset console color to black
2020-04-24 23:07:40 +02:00
rm -f mail_content.txt
cat >> mail_content.txt <<EOL
<head>
<style>
h1{
text-align: center;
font-size: 60;
color: red;
margin: 30px;
}
h2{
font-size: 30;
color: black;
}
div {
margin: 30px;
font-family: "Lucida Console", Courier, monospace;
}
.overdue{
color: red;
}
footer{
margin-top: 9em;
}
</style>
</head>
<body>
2022-09-01 11:33:56 +02:00
<h1>AutoBackup Failure on $backupServerName</h1>
2020-04-24 23:07:40 +02:00
<h2>Overdue for the automatic backup for "${repos_name[i]}"</h2>
<div>
<p>Local time: $(date)</p>
<p>Failed backup repo: ${repos_name[i]}</p>
<p>Planned backup interval: $plannedIntervall</p>
<p>Last backup: $lastBackup</p>
<p>Overdue: <a class="overdue">$overdue</a></p>
</div>
</body>
<footer>
2022-09-01 11:33:56 +02:00
<p>Version: 0.2.3</p>
<p>Author: <a href="mailto:mail@hendrikschutter.com">mail@hendrikschutter.com</a></p>
2020-04-24 23:07:40 +02:00
</footer>
EOL
if [ "$DEBUG" = "false" ];
then
2022-09-01 11:33:56 +02:00
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
2020-04-24 23:07:40 +02:00
rm mail_content.txt
fi
fi
done
echo " "
echo "Finished"
2021-12-26 17:54:40 +01:00