#!/bin/bash set -e BACKUP_SCHEDULE="${BACKUP_SCHEDULE:-0 3 * * *}" SKILL_DIR="$(dirname "$(dirname "$0")")" # Validate password is set if [ -z "$BACKUP_PASSWORD" ]; then echo "ERROR: BACKUP_PASSWORD is required" echo "Set BACKUP_PASSWORD environment variable to enable backups" exit 1 fi # Setup cron job for scheduled backups setup_cron() { local cron_file="/etc/cron.d/vibestack-backup" local backup_script="$SKILL_DIR/scripts/backup.sh" # Build environment exports for cron local env_exports="" env_exports+="BACKUP_PASSWORD='$BACKUP_PASSWORD' " env_exports+="BACKUP_TARGET='${BACKUP_TARGET:-/backups}' " env_exports+="BACKUP_RETENTION='${BACKUP_RETENTION:-7d}' " [ -n "$BACKUP_S3_ACCESS_KEY" ] && env_exports+="BACKUP_S3_ACCESS_KEY='$BACKUP_S3_ACCESS_KEY' " [ -n "$BACKUP_S3_SECRET_KEY" ] && env_exports+="BACKUP_S3_SECRET_KEY='$BACKUP_S3_SECRET_KEY' " [ -n "$BACKUP_B2_ACCOUNT_ID" ] && env_exports+="BACKUP_B2_ACCOUNT_ID='$BACKUP_B2_ACCOUNT_ID' " [ -n "$BACKUP_B2_ACCOUNT_KEY" ] && env_exports+="BACKUP_B2_ACCOUNT_KEY='$BACKUP_B2_ACCOUNT_KEY' " # Create cron job cat > "$cron_file" << EOF # VibeStack automated backup SHELL=/bin/bash PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin $BACKUP_SCHEDULE root $env_exports $backup_script >> /var/log/vibestack-backup.log 2>&1 EOF chmod 644 "$cron_file" echo "Cron job configured: $BACKUP_SCHEDULE" } # Write initial status write_status() { cat > /run/vibestack/backup-status.json << EOF { "status": "running", "schedule": "$BACKUP_SCHEDULE", "target": "${BACKUP_TARGET:-/backups}", "last_backup": null, "last_status": null } EOF } setup_cron write_status echo "Starting cron daemon for scheduled backups..." echo "Schedule: $BACKUP_SCHEDULE" echo "Target: ${BACKUP_TARGET:-/backups}" echo "" echo "Manual backup: $SKILL_DIR/scripts/backup.sh" echo "Manual restore: $SKILL_DIR/scripts/restore.sh --list" # Start cron in foreground exec cron -f