backup-script/backup.sh

108 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
# A Backup script designed for podman containers backed by systemd
#
# Templates: https://git.fl1tzi.com/server/systemd-infrastructure
#
# NOTE: This script will by only backup units that are already running.
# ------------------------
# CONFIGURATION
# ------------------------
declare -A UnitMap
# Declare which units uses which folder.
# eg. UnitMap["my_unit"]="my_folder"
# This is the directory where all folder are stored, with your compose.yaml files inside them and the data.
# DO NOT FORGET THE SLASH AT THE END AND DO NOT USE WHITESPACES!
RootDir=$HOME/compose/
# The destination in Rclone
# eg. "cloud:example-folder" -> "google-drive:example-folder/FOLDER"
# eg. "cloud:" -> "cloud:/FOLDER"
# eg. "cloud:." -> "cloud:./FOLDER"
Dest="cloud:."
# The method that will be used by Rclone
# eg. "clone"
# eg. "clone --max-age 2d"
# eg. "sync --progress"
Method="sync"
# ------------------------
# SCRIPT
# ------------------------
if [ $? -ne 0 ]
then
echo "Error in configuration."
exit 1
fi
printf "Starting backup...\n"
for unit in "${!UnitMap[@]}"
do
echo "---[ $unit ]---"
folder="$RootDir${UnitMap[$unit]}"
folder_name="${UnitMap[$unit]}"
# print out folder
printf "folder:\n\t$folder\n"
# check if dir exists
if [ ! -d $folder ]
then
echo "The folder does not exist."
echo "SKIPPING UNIT"
continue
fi
systemctl --user status $unit >/dev/null
# get error code from the status
exit_code=$?
# 0 = active start backup
# 1 = failed skip
# 2 = unused skip
# 3 = not active skip
# 4 = no such unit skip
if [ $exit_code -eq 0 ]
then
printf "unit status:\n\t$exit_code = Unit is running\n"
else
printf "unit status:\n\t$exit_code\n"
if [ $exit_code -eq 1 ]
then
printf "\tThe unit failed\n"
elif [ $exit_code -eq 2 ]
then
printf "\tThe unit is unused\n"
elif [ $exit_code -eq 3 ]
then
printf "\tThe unit is not active\n"
elif [ $exit_code -eq 4 ]
then
printf "\tThe unit does not exist\n"
fi
echo "SKIPPING UNIT"
continue
fi
echo "Stopping unit..."
systemctl --user stop $unit >/dev/null
echo "Starting backup..."
/usr/bin/podman unshare /usr/bin/rclone $Method $folder $Dest/$folder_name
echo "Starting unit..."
systemctl --user start $unit >/dev/null
done
echo "FINISHED"