I write for my own a backup script for my wp site everyday and upload backup file to online storage (Google Drive) using rclone. Hope this also help you
#!/usr/bin/env bash
# WP-CLI Back up Script to Google Drive use rclone
# Source: https://nguyenvanhieu.vn
# Author: Hieu Nguyen Van
#define local path for backups
BACKUPPATH=/home/backup/files
#path to WordPress installations
SITESBASE=/var/www
#S3 bucket
REMOTE_DIR=WEB_BACKUP
#date prefix
DATEFORM=$(date +"%Y-%m-%d")
#Days to retain
DAYSKEEP=7
# Create array() of domains listed in $SITESBASE
SITELIST=()
for DIR in "$SITESBASE"/*/ ; do
DIR2=${DIR%/} # Remove the trailing /
DIR3=${DIR2##*/} # Remove everything up to, and including, the last /
if [[ ${DIR3} = *"."* ]]; then # Only add strings that have a period in them (ex: domain names)
SITELIST+=( "$DIR3" )
fi
done
#make sure the backup folder exists
mkdir -p "$BACKUPPATH/$DATEFORM"
#start the loop
for SITE in "${SITELIST[@]}"; do
echo "Start backup site $SITE"
cd "$SITESBASE/$SITE/htdocs" || exit
if [ ! -e "$BACKUPPATH/$DATEFORM" ]; then
mkdir "$BACKUPPATH/$DATEFORM"
fi
tar -czf "$BACKUPPATH/$DATEFORM/$SITE.tar.gz" -C "$SITESBASE/$SITE" .
wp db export "$BACKUPPATH/$DATEFORM/$SITE".sql \
--host="$ALTDBHOST" \
--path="$SITESBASE/$SITE/htdocs" \
--single-transaction \
--quick \
--lock-tables=false \
--allow-root \
--skip-themes \
--skip-plugins
< "$BACKUPPATH/$DATEFORM/$SITE".sql gzip > "$BACKUPPATH/$DATEFORM/$SITE".sql.gz
rm "$BACKUPPATH/$DATEFORM/$SITE".sql
done
echo "Starting uploading.";
/usr/sbin/rclone move "$BACKUPPATH/$DATEFORM" "gg_drive:$REMOTE_DIR/$DATEFORM" > /dev/null 2>&1
echo "Done uploading.";
# delete local backup files?
rm -rf "$BACKUPPATH"
/usr/sbin/rclone -q --min-age 1w delete "gg_drive:$REMOTE_DIR" #Remove all backups older than 2 week
/usr/sbin/rclone -q --min-age 1w rmdirs "gg_drive:$REMOTE_DIR" #Remove all empty folders older than 2 week
/usr/sbin/rclone cleanup "gg_drive:" #Cleanup Trash
echo "Finished";