68 lines
2.0 KiB
Bash
68 lines
2.0 KiB
Bash
#!/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
|