35 lines
960 B
Django/Jinja
35 lines
960 B
Django/Jinja
#!/bin/bash
|
|
set -euo pipefail
|
|
|
|
DATE=$(date +%Y-%m-%d)
|
|
MONTH=$(date +%Y-%m)
|
|
DAY_OF_MONTH=$(date +%d)
|
|
|
|
echo "[$(date)] Starting backup"
|
|
|
|
{% for item in backup_dirs %}
|
|
echo "[$(date)] Backing up {{ item.src }}"
|
|
|
|
# Daily backup — kept for 30 days
|
|
rclone sync {{ item.src }} spaces://{{ backup_bucket }}/{{ item.dest }}/daily/${DATE} \
|
|
--s3-acl private
|
|
|
|
# Monthly backup on the 1st — kept for 12 months
|
|
if [ "${DAY_OF_MONTH}" = "01" ]; then
|
|
rclone sync {{ item.src }} spaces://{{ backup_bucket }}/{{ item.dest }}/monthly/${MONTH} \
|
|
--s3-acl private
|
|
echo "[$(date)] Monthly backup complete for {{ item.src }}"
|
|
fi
|
|
|
|
# Prune daily backups older than 30 days
|
|
rclone delete spaces://{{ backup_bucket }}/{{ item.dest }}/daily \
|
|
--min-age 30d --s3-acl private
|
|
|
|
# Prune monthly backups older than 12 months
|
|
rclone delete spaces://{{ backup_bucket }}/{{ item.dest }}/monthly \
|
|
--min-age 365d --s3-acl private
|
|
|
|
{% endfor %}
|
|
|
|
echo "[$(date)] Backup complete"
|