56 lines
1.4 KiB
Bash
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."
|