#!/bin/bash # Load environment variables if [ -f .env ]; then export $(grep -v '^#' .env | xargs) else echo "Error: .env file not found." exit 1 fi if [ "$ENABLE_BACKUPS" != "TRUE" ]; then echo "Backups are disabled in .env. Exiting." exit 0 fi PROJECT_DIR=$(pwd) BACKUP_DIR="${PROJECT_DIR}/backups" BACKUP_SCRIPT="${PROJECT_DIR}/run_backup.sh" # Create backups directory mkdir -p "$BACKUP_DIR" # Create the actual backup script that cron will run cat < "$BACKUP_SCRIPT" #!/bin/bash # Auto-generated backup script mkdir -p "$BACKUP_DIR" cd "$PROJECT_DIR" # Create new backup FILENAME="mail_backup_\$(date +%F_%H-%M-%S).tar.gz" tar -czvf "$BACKUP_DIR/\$FILENAME" ./data/ > /dev/null 2>&1 # Delete old backups based on retention days find "$BACKUP_DIR" -type f -name "mail_backup_*.tar.gz" -mtime +$BACKUP_RETENTION_DAYS -exec rm {} \; EOF chmod +x "$BACKUP_SCRIPT" # Remove existing cron job for this backup script to avoid duplicates crontab -l | grep -v "$BACKUP_SCRIPT" | crontab - # Add new cron job (crontab -l 2>/dev/null; echo "$BACKUP_CRON $BACKUP_SCRIPT >> $PROJECT_DIR/backup.log 2>&1") | crontab - echo "Backup automation configured successfully!" echo "Schedule: $BACKUP_CRON" echo "Retention: $BACKUP_RETENTION_DAYS days" echo "Backups will be saved to: $BACKUP_DIR"