93 lines
2.7 KiB
Bash
Executable File
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"
|