#!/usr/bin/env bash set -euo pipefail # === CONFIG === SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" DATA_DIR="${SCRIPT_DIR}/trilium-data" BACKUP_DIR="/backup/Trilium" KEEP=5 cd "$SCRIPT_DIR" # === Ensure backup path exists === mkdir -p "$BACKUP_DIR" # === Stop container === echo "Stopping Trilium container..." docker compose down # === Backup === TIMESTAMP="$(date +"%Y-%m-%d_%H-%M-%S")" BACKUP_FILE="${BACKUP_DIR}/trilium_backup_${TIMESTAMP}.tar.gz" echo "Backing up data to: $BACKUP_FILE" tar -czf "$BACKUP_FILE" \ trilium-data \ docker-compose.yml echo "Backup completed." # === Start container again === echo "Starting Trilium back up..." docker compose up -d echo "Trilium started." # === Rotate backups === echo "Cleaning old backups (keeping last ${KEEP})..." shopt -s nullglob backups=( $(ls -1t "$BACKUP_DIR"/trilium_backup_*.tar.gz) ) if [ "${#backups[@]}" -gt "$KEEP" ]; then for old in "${backups[@]:$KEEP}"; do echo "Removing old backup: $old" rm -f "$old" done else echo "No old backups to remove." fi echo "Backup routine complete ✔"