Skip to content

Instantly share code, notes, and snippets.

@giraycoskun
Last active February 13, 2026 15:14
Show Gist options
  • Select an option

  • Save giraycoskun/1aafd23f5e9cdc3af6d8cc360a040e75 to your computer and use it in GitHub Desktop.

Select an option

Save giraycoskun/1aafd23f5e9cdc3af6d8cc360a040e75 to your computer and use it in GitHub Desktop.
Booklore Service data backup script to run as crontab entry depends on myscripts project
#!/bin/bash
#crontab entry: /bin/bash /home/giraycoskun/docker/booklore/backup.sh >> /home/giraycoskun/backups/booklore_cron_log.txt 2>&1
TIMESTAMP=$(date +"%Y-%m-%d_%H-%M-%S")
echo "########################################"
echo "New Backup Process Started at $TIMESTAMP"
# --- Configuration ---
BOOKS_DIR="/home/giraycoskun/docker/booklore/books"
DATA_DIR="/home/giraycoskun/docker/booklore/data"
AUDIBOOKS_DIR="/home/giraycoskun/docker/booklore/audiobooks"
GDRIVE_REMOTE="gdrive:backups" # Path on Google Drive
BACKUP_DIR="/home/giraycoskun/backups/"
BOOKS_BACKUP_NAME="booklore_books_$TIMESTAMP.tar.gz"
DATA_BACKUP_NAME="booklore_data_$TIMESTAMP.tar.gz"
AUDIOBOOKS_BACKUP_NAME="booklore_audiobooks_$TIMESTAMP.tar"
# Create backup directory if it doesn't exist
mkdir -p "$BACKUP_DIR"
# 1. Create the compressed backup
echo "Backup for books started: $BOOKS_BACKUP_NAME"
tar -I pigz -cvf "$BACKUP_DIR/$BOOKS_BACKUP_NAME" -C "$BOOKS_DIR" .
echo "Backup for books completed: $BOOKS_BACKUP_NAME"
echo "Backup for data started: $DATA_BACKUP_NAME"
tar -I pigz -cvf "$BACKUP_DIR/$DATA_BACKUP_NAME" -C "$DATA_DIR" .
echo "Backup for data completed: $DATA_BACKUP_NAME"
echo "Backup for audiobooks started: $AUDIOBOOKS_BACKUP_NAME"
tar -cvf "$BACKUP_DIR/$AUDIOBOOKS_BACKUP_NAME" -C "$AUDIBOOKS_DIR" .
echo "Backup for audiobooks completed: $AUDIOBOOKS_BACKUP_NAME"
# Delete backups older than 1 day (the "previous" ones)
echo "Deleting Old Backups"
find "$BACKUP_DIR" -name "booklore_*.tar.gz" -type f -mtime +1 -delete
# Upload to Google Drive
echo "Uploading to Google Drive..."
rclone copy "$BACKUP_DIR" "$GDRIVE_REMOTE" --include "booklore_*_$TIMESTAMP.tar*" --progress
echo "Cleaning up Google Drive (older than 7 days)..."
rclone delete "$GDRIVE_REMOTE" --min-age 7d --dry-run # Remove --dry-run once tested!
echo "Backup Complete - Sending Notification"
cd /home/giraycoskun/Code/myscripts/
/home/giraycoskun/.local/bin/uv run python -m myscripts notify send-to-discord --message "Backup Booklore Complete"
echo "########################################"
#!/bin/bash
echo -e "\n"
echo "======================================================="
echo "==== Backup started: $(date) ===="
echo "Running as: $(whoami)"
echo "PWD: $(pwd)"
# ls -ld /home/giraycoskun/docker/booklore/books
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
# Run rclone sync and capture output and exit status
if rclone sync /home/giraycoskun/docker/booklore/books/ gdrive:Library/booklore \
--config /home/giraycoskun/.config/rclone/rclone.conf \
--create-empty-src-dirs \
--fast-list \
--metadata; then
# Success
MESSAGE01="✅ Books Sync completed successfully"
rclone size gdrive:Library/booklore --config /home/giraycoskun/.config/rclone/rclone.conf
else
# Failure
MESSAGE01="❌ Backup Sync for Booklore FAILED - Check logs"
fi
echo $MESSAGE01
# -------- SECOND SYNC --------
if rclone sync /home/giraycoskun/docker/booklore/audiobooks/ gdrive:Library/audiobooks \
--config /home/giraycoskun/.config/rclone/rclone.conf \
--create-empty-src-dirs \
--fast-list \
--metadata; then
MESSAGE02="✅ AudioBooks Sync completed successfully"
else
MESSAGE02="❌ Backup sync for AudioBooks FAILED - Check logs"
fi
echo $MESSAGE02
# Send notification
cd /home/giraycoskun/Code/myscripts
/home/giraycoskun/.local/bin/uv run python -m myscripts notify send-to-discord \
--message "$MESSAGE01"
/home/giraycoskun/.local/bin/uv run python -m myscripts notify send-to-discord \
--message "$MESSAGE02"
echo "==== Backup finished: $(date) ===="
echo "======================================================"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment