Last active
February 13, 2026 15:14
-
-
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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 "########################################" |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #!/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