#!/bin/bash #add more paths for different foundry instances instances=( "/home/ubuntu/foundryuserdata-joseph|foundry-joseph" ) BACKUP_ROOT="/home/ubuntu/backups" RCLONE_REMOTE="googledrive:FoundryBackups" RETENTION_DAYS_LOCAL=7 RETENTION_DAYS_REMOTE=30 DATE=$(date +%Y-%m-%d_%H%M) for ENTRY in "${instances[@]}"; do SOURCE_DIR="${ENTRY%%|*}" PM2_NAME="${ENTRY##*|}" FOLDER_NAME=$(basename "$SOURCE_DIR") BACKUP_DIR="$BACKUP_ROOT/$FOLDER_NAME" FILENAME="$FOLDER_NAME-backup-$DATE.tar.gz" mkdir -p "$BACKUP_DIR" echo "Processing: $PM2_NAME (Folder: $FOLDER_NAME)" echo "Stopping PM2 process: $PM2_NAME..." pm2 stop "$PM2_NAME" echo "Zipping files..." tar -czf "$BACKUP_DIR/$FILENAME" -C "$SOURCE_DIR" . TAR_EXIT_CODE=$? echo "Restarting PM2 process: $PM2_NAME..." pm2 start "$PM2_NAME" if [ $TAR_EXIT_CODE -eq 0 ]; then echo "Local backup successful: $FILENAME" echo "Uploading to Google Drive..." rclone copy "$BACKUP_DIR/$FILENAME" "$RCLONE_REMOTE/$FOLDER_NAME" --transfers=4 --checkers=8 echo "Cleaning remote old files..." rclone delete "$RCLONE_REMOTE/$FOLDER_NAME" --min-age ${RETENTION_DAYS_REMOTE}d else echo "BACKUP FAILED for $FOLDER_NAME " fi echo "Cleaning local old files..." find "$BACKUP_DIR" -type f -name "*.tar.gz" -mtime +$RETENTION_DAYS_LOCAL -delete done echo "All backup tasks completed."