#!/bin/bash # Logowanie wszystkiego do pliku backup.log LOG_FILE="/home/seba/mydocker/backup.log" exec > >(tee -a "$LOG_FILE") 2>&1 DATE=$(date +%Y%m%d_%H%M) BACKUP_DIR="/media/seagata16t/backups/db_dumps" # Ustawiamy ścieżkę zgodną z tym, co widzi rclone (sprawdź rclone lsd gdrive:) REMOTE_PATH="gdrive:backups_n_configs/acemagic/db_dumps" RCLONE_CONF="/home/seba/.config/rclone/rclone.conf" echo "--- Backup start: $DATE ---" # 1. Zrzut bazy z kompresją echo "Dumping database..." DBS=$(docker exec postgres18 psql -U homeassistant -tAc "SELECT datname FROM pg_database WHERE datistemplate=false AND datname!='postgres' ORDER BY datname;" | tr '\n' ',') echo "Databases: ${DBS%,}" docker exec postgres18 pg_dumpall -U homeassistant | gzip > $BACKUP_DIR/db_dump_$DATE.sql.gz SIZE=$(du -sh $BACKUP_DIR/db_dump_$DATE.sql.gz | cut -f1) echo "Dump size: $SIZE" # 2. Wysyłka do Google Drive echo "Uploading to Google Drive..." rclone --config $RCLONE_CONF copy $BACKUP_DIR/db_dump_$DATE.sql.gz $REMOTE_PATH # 3. Usuwanie starych kopii na GDrive (zostawia 3 najnowsze) echo "Cleaning old backups on GDrive..." rclone --config $RCLONE_CONF lsf $REMOTE_PATH --format "tp" --separator ";" --files-only | sort | head -n -3 | while read -r line; do FILENAME=$(echo $line | cut -d';' -f2) echo "Deleting old remote file: $FILENAME" rclone --config $RCLONE_CONF delete "$REMOTE_PATH/$FILENAME" done # 4. Usuwanie lokalne find $BACKUP_DIR -type f -name "*.sql.gz" -mtime +1 -delete DURATION=$(( $(date +%s) - $(date -d "${DATE:0:8} ${DATE:9:2}:${DATE:11:2}" +%s) )) echo "Duration: ${DURATION}s" echo "--- Backup finished: $(date) ---"