Files
restic-backup-sidecar/entrypoint.sh
2026-02-15 15:16:36 +01:00

52 lines
1.4 KiB
Bash

#!/bin/bash
set -euo pipefail
echo "==> Restic backup sidecar starting"
# Validate required env vars
for var in RESTIC_REPOSITORY RESTIC_PASSWORD_FILE BACKUP_CRON; do
if [ -z "${!var:-}" ]; then
echo "ERROR: $var is not set" >&2
exit 1
fi
done
if [ ! -f "$RESTIC_PASSWORD_FILE" ]; then
echo "ERROR: Password file $RESTIC_PASSWORD_FILE does not exist" >&2
exit 1
fi
export RESTIC_PASSWORD_FILE
# Initialize restic repo if it doesn't exist yet
if ! restic snapshots --no-lock >/dev/null 2>&1; then
echo "==> Initializing restic repository at $RESTIC_REPOSITORY"
restic init
fi
echo "==> Repository ready: $RESTIC_REPOSITORY"
restic snapshots --no-lock --latest 1 || true
# Export all relevant env vars to a file so crond jobs can source them
# (crond runs jobs in a minimal environment without Docker env vars)
ENV_FILE=/etc/restic-backup.env
: > "$ENV_FILE"
for var in RESTIC_REPOSITORY RESTIC_PASSWORD_FILE BACKUP_SOURCE \
KEEP_DAILY KEEP_WEEKLY KEEP_MONTHLY KEEP_YEARLY \
MYSQL_HOST MYSQL_USER MYSQL_PASSWORD MYSQL_DATABASE PATH; do
if [ -n "${!var+x}" ]; then
printf '%s=%q\n' "$var" "${!var}" >> "$ENV_FILE"
fi
done
# Write crontab for root user
cat > /etc/crontabs/root <<CRON
$BACKUP_CRON /usr/local/bin/backup.sh >> /proc/1/fd/1 2>> /proc/1/fd/2
CRON
echo "==> Cron schedule: $BACKUP_CRON"
# Run crond in foreground
echo "==> Starting crond"
exec crond -f -l 6