autobroadcaster/scripts/backup.sh

93 lines
2.7 KiB
Bash
Executable File

#!/bin/bash
#
# Scheduler Backup Script
# Backs up database and configuration with rotation
#
set -e
# Configuration
BACKUP_DIR="${BACKUP_DIR:-/backup/scheduler}"
DB_PATH="${DB_PATH:-/opt/scheduler/scheduler.db}"
CONFIG_PATH="${CONFIG_PATH:-/etc/scheduler/scheduler.env}"
RETENTION_DAYS=30
COMPRESS_AFTER_DAYS=7
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
DATE=$(date +%Y%m%d_%H%M%S)
echo -e "${GREEN}=== Scheduler Backup - $(date) ===${NC}"
# Create backup directory
mkdir -p "$BACKUP_DIR"
# Check if database exists
if [ ! -f "$DB_PATH" ]; then
echo -e "${RED}✗ Database not found: $DB_PATH${NC}"
exit 1
fi
# Backup database
echo "Backing up database..."
cp "$DB_PATH" "$BACKUP_DIR/scheduler_${DATE}.db"
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ Database backed up: scheduler_${DATE}.db${NC}"
else
echo -e "${RED}✗ Database backup failed${NC}"
exit 1
fi
# Backup config if exists
if [ -f "$CONFIG_PATH" ]; then
echo "Backing up configuration..."
cp "$CONFIG_PATH" "$BACKUP_DIR/config_${DATE}.env"
if [ $? -eq 0 ]; then
echo -e "${GREEN}✓ Config backed up: config_${DATE}.env${NC}"
else
echo -e "${YELLOW}⚠ Config backup failed${NC}"
fi
fi
# Get database stats
DB_SIZE=$(du -h "$BACKUP_DIR/scheduler_${DATE}.db" | cut -f1)
JOB_COUNT=$(sqlite3 "$BACKUP_DIR/scheduler_${DATE}.db" "SELECT COUNT(*) FROM jobs;" 2>/dev/null || echo "N/A")
echo -e "Database size: ${DB_SIZE}, Jobs: ${JOB_COUNT}"
# Compress old backups (older than COMPRESS_AFTER_DAYS)
echo "Compressing old backups..."
COMPRESSED=$(find "$BACKUP_DIR" -name "*.db" -mtime +${COMPRESS_AFTER_DAYS} -exec gzip {} \; -print | wc -l)
if [ $COMPRESSED -gt 0 ]; then
echo -e "${GREEN}✓ Compressed $COMPRESSED old backup(s)${NC}"
fi
# Delete backups older than RETENTION_DAYS
echo "Cleaning up old backups..."
DELETED_DB=$(find "$BACKUP_DIR" -name "*.db.gz" -mtime +${RETENTION_DAYS} -delete -print | wc -l)
DELETED_CFG=$(find "$BACKUP_DIR" -name "*.env" -mtime +${RETENTION_DAYS} -delete -print | wc -l)
if [ $DELETED_DB -gt 0 ] || [ $DELETED_CFG -gt 0 ]; then
echo -e "${GREEN}✓ Deleted $DELETED_DB database(s) and $DELETED_CFG config(s)${NC}"
fi
# List recent backups
echo ""
echo "Recent backups:"
ls -lh "$BACKUP_DIR" | tail -5
# Optional: Upload to S3 or remote storage
# Uncomment and configure if needed
#
# if command -v aws &> /dev/null; then
# echo "Uploading to S3..."
# aws s3 cp "$BACKUP_DIR/scheduler_${DATE}.db" "s3://your-bucket/scheduler-backups/"
# echo -e "${GREEN}✓ Uploaded to S3${NC}"
# fi
echo ""
echo -e "${GREEN}=== Backup completed ===${NC}"
echo "Backup location: $BACKUP_DIR/scheduler_${DATE}.db"