ansible-playbooks/roles/files/debian/setup/scripts/backup.sh
2024-11-08 16:44:28 +08:00

75 lines
No EOL
1.8 KiB
Bash

#!/bin/bash
current_date=$(date "+%B %-d %Y%l:%M %p")
env BORG_UNKNOWN_UNENCRYPTED_REPO_ACCESS_IS_OK=yes
env BORG_RELOCATED_REPO_ACCESS_IS_OK=yes
echo "Timestamp: $current_date"
# Check if the required mount point exists
if ! df -h | grep -q "^//255\.255\.255\.255/SAMBA-MOUNT.*\/mnt/backups$"; then
echo "Error: Required mount point //255.255.255.255/SAMBA-MOUNT not found or not mounted at /mnt/backups."
exit 1
fi
function backup() {
# $1 - Backup Name
# $2 - Directory
# $3 - Extras
if [ "$1" == "" ] || [ "$2" == "" ]; then
echo "Missing arguments!"
exit
fi
# Root backup directory
root_directory="/mnt/backups/"
echo "Starting backups for: $1"
# Check if the backup directory exists
if [ ! -d "$root_directory/$1" ]; then
echo "Backup directory does not exist for $1. Initializing one"
borg init --encryption=none "$root_directory/$1"
else
echo "Backup directory already exists for $1"
fi
borg create --stats --progress --compression lz4 "$root_directory/$1"::"$current_date" "$2" $3
echo "Cleaning old backups"
borg prune --stats "$root_directory/$1" -d 6
borg compact "$root_directory/$1"
echo "Backup for $1 finished"
}
## Docker Projects
## Root Docker Projects Directory
docker_projects="/mnt/nvme/files/docker projects/"
# Sample Entry
# backup "sample" "$docker_projects/sample_project" '--exclude "*.tmp"
## Non-Docker Directories
# Bash Scripts
backup "bash-scripts" "/root/scripts"
# ACME
backup "acme" "/root/.acme.sh" '--exclude "*.tmp"'
# Crontab
backup "cron" "/var/spool/cron/crontabs"
# Nginx
backup "nginx" "/etc/nginx" '--exclude "*.tmp"'
# Syncthing
backup "syncthing" "/root/.config/syncthing" '--exclude "*.tmp"'
# Samba
backup "samba" "/etc/samba"
# Samba Credentials
backup "samba_credentials" "/root/.samba"