bash-scripts/backup_foundry.sh

56 lines
1.4 KiB
Bash

#!/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."