Initial backup skill implementation

This commit is contained in:
Azat
2026-02-02 23:44:24 +01:00
commit 5a92cac546
5 changed files with 633 additions and 0 deletions

67
scripts/run.sh Normal file
View File

@@ -0,0 +1,67 @@
#!/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