Initial backup skill implementation
This commit is contained in:
67
scripts/run.sh
Normal file
67
scripts/run.sh
Normal 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
|
||||
Reference in New Issue
Block a user