From d2417fc187e362d3d74226d06c02de0630d05528 Mon Sep 17 00:00:00 2001 From: Gabriel Augendre Date: Tue, 15 Oct 2024 08:54:52 +0200 Subject: [PATCH] add borg sync script --- playbooks/apps/files/bin/borg-sync | 57 ++++++++++++++++++++++++++++++ playbooks/system/cron-root.yaml | 6 ++++ 2 files changed, 63 insertions(+) create mode 100755 playbooks/apps/files/bin/borg-sync diff --git a/playbooks/apps/files/bin/borg-sync b/playbooks/apps/files/bin/borg-sync new file mode 100755 index 0000000..218b60d --- /dev/null +++ b/playbooks/apps/files/bin/borg-sync @@ -0,0 +1,57 @@ +#!/bin/bash + +# Change all the variables below to suit your needs: +SOURCE_DIRECTORY="/mnt/data/nextcloud-aio/backups/borg" +RCLONE_CONFIG="borgbase-nextcloud-aio" + +TARGET_DIRECTORY="repo" # this is the BorgBase directory name: modify it only if you want to specify a different one (discouraged) + +######################################## +# DO NOT modify any of the following! # +######################################## + +if [ "$EUID" -ne 0 ]; then + echo "run as root" + output 1 +fi + +if ! [ -d "$SOURCE_DIRECTORY" ]; then + echo "The root directory does not exist." + exit 1 +fi + +if [ -z "$(ls -A "$SOURCE_DIRECTORY/")" ]; then + echo "The source directory is empty, which is not allowed." + exit 1 +fi + +if [ -f "$SOURCE_DIRECTORY/lock.roster" ]; then + echo "Unable to execute the script as the backup archive is currently modified. Please try again later." + exit 1 +fi + +if [ -f "$SOURCE_DIRECTORY/aio-lockfile" ]; then + echo "Cannot continue because aio-lockfile already exists." + exit 1 +fi + +touch "$SOURCE_DIRECTORY/aio-lockfile" + + +if ! rclone sync -v --exclude aio-lockfile "$SOURCE_DIRECTORY/" "$RCLONE_CONFIG:$TARGET_DIRECTORY"; then + if docker ps --format "{{.Names}}" | grep "^nextcloud-aio-nextcloud$"; then + docker exec -en nextcloud-aio-nextcloud bash /notify.sh "Rclone failed." "Failed to synchronise the backup repository with the target directory." + else + echo "Failed to synchronise the backup repository with the target directory." + fi + rm "$SOURCE_DIRECTORY/aio-lockfile" + exit 1 +fi + +rm "$SOURCE_DIRECTORY/aio-lockfile" + +if docker ps --format "{{.Names}}" | grep "^nextcloud-aio-nextcloud$"; then + docker exec -en nextcloud-aio-nextcloud bash /notify.sh "Rclone backup successful!" "Synchronised the backup repository successfully." +else + echo "Synchronised the backup repository successfully." +fi diff --git a/playbooks/system/cron-root.yaml b/playbooks/system/cron-root.yaml index 916914d..d8a4f24 100644 --- a/playbooks/system/cron-root.yaml +++ b/playbooks/system/cron-root.yaml @@ -15,6 +15,12 @@ minute: 30 hour: "*/3" job: /mnt/data/bin/healthcheck restic-prune /mnt/data/bin/restic-prune + - name: Cron - Borgbase sync + ansible.builtin.cron: + name: borgbase sync + minute: 30 + hour: 3 + job: /mnt/data/bin/healthcheck borg-sync /mnt/data/bin/borg-sync - name: Cron - SMART short ansible.builtin.cron: name: SMART short