From 293814277d2b9bb7b89f3f203962a43e0a1b8aaa Mon Sep 17 00:00:00 2001 From: paspo Date: Tue, 16 Dec 2025 13:51:50 +0100 Subject: [PATCH] retention --- README.md | 1 + rootfs/app/backup.sh | 27 ++++++++++++++++++++++++--- 2 files changed, 25 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 78d1628..48ee25e 100644 --- a/README.md +++ b/README.md @@ -35,6 +35,7 @@ services: MARIADB_DATABASE: my-db CRONTAB: "15 */4 * * *" COMPRESSION: gzip # gzip | bzip2 | xz | zstd + KEEP_SUCCESFUL_DAYS: 15 # default is 30 RCLONE_REMOTE: myremote RCLONE_PATH: /backups RCLONE_CONFIG_FILE: /config/rclone.conf diff --git a/rootfs/app/backup.sh b/rootfs/app/backup.sh index 41dd3fc..57a202b 100755 --- a/rootfs/app/backup.sh +++ b/rootfs/app/backup.sh @@ -11,11 +11,12 @@ COMPRESSION=${COMPRESSION:-gzip} RCLONE_CONFIG_FILE=${RCLONE_CONFIG_FILE:-/config/rclone.conf} RCLONE_REMOTE=${RCLONE_REMOTE:-myremote} RCLONE_PATH=${RCLONE_PATH:-/backups} +KEEP_SUCCESFUL_DAYS=${KEEP_SUCCESFUL_DAYS:-30} TMPDIR=$(mktemp -d) DEST_FILENAME=$(date +%Y-%m-%d_%H-%M-%S).sql BACKUP_FILE="${TMPDIR}/${DEST_FILENAME}" -RCLONE_PATH="${RCLONE_PATH}/$(date +%Y-%m-%d)" +RCLONE_DEST_PATH="${RCLONE_PATH}/$(date +%Y-%m-%d)" trap cleanup EXIT cleanup() { @@ -55,6 +56,11 @@ copy_failed() { exit 1 } +delete_failed() { + echo "Cleanup delete failed" + exit 1 +} + COMPRESSOR="cat" if [ "${COMPRESSION}" = "gzip" ]; then COMPRESSOR="gzip" @@ -100,12 +106,27 @@ echo "Copying backup to remote" rclone \ -v --config "${RCLONE_CONFIG_FILE}" \ - mkdir "${RCLONE_REMOTE}:${RCLONE_PATH}" || mkdir_failed + mkdir "${RCLONE_REMOTE}:${RCLONE_DEST_PATH}" || mkdir_failed rclone \ -v --config "${RCLONE_CONFIG_FILE}" \ - copy "${BACKUP_FILE}" "${RCLONE_REMOTE}:${RCLONE_PATH}" || copy_failed + copy "${BACKUP_FILE}" "${RCLONE_REMOTE}:${RCLONE_DEST_PATH}" || copy_failed echo "success" > "${STATUS_FILE}" echo "Backup completed" + +echo "Cleaning up old backups" + +rclone \ + -v --config "${RCLONE_CONFIG_FILE}" \ + lsd "${RCLONE_REMOTE}:${RCLONE_PATH}" | \ + awk '{print $5}' | sort -r | tail -n +$((KEEP_SUCCESFUL_DAYS + 1)) \ + | while read -r line; do + echo "Deleting backup: ${line}" + rclone \ + -v --config "${RCLONE_CONFIG_FILE}" \ + purge "${RCLONE_REMOTE}:${RCLONE_PATH}/${line}" || delete_failed + done + +echo "Cleanup completed"