Skip to content

Borg — алерт когда backup упал или старее N часов

Borg backup упал (passphrase rotated, repo lock завис, ssh-ключ expired) — узнаешь только когда нужно restore, и крайний снапшот неделю назад.

Рецепт

bash
#!/usr/bin/env bash
# /etc/cron.d/borg-backup
# 30 3 * * * root /opt/borg-run.sh && /opt/borg-check.sh

# Wrap your borg backup in a script that pings on success
# /opt/borg-run.sh:
#   borg create ::backup-$(date +%F) /data && \
#       curl -fsS "$HEARTBEAT_URL/borg-success"

# Separate guard checks that the most-recent archive is < 26 h old.
# /opt/borg-check.sh — runs every 6 h
REPO=${BORG_REPO}
MAX_AGE_HOURS=${MAX_AGE_HOURS:-26}

LAST=$(borg list --short "$REPO" | tail -1)
[ -z "$LAST" ] && {
  curl -fsS "$HEARTBEAT_URL" --data "borg_no_archives=true"
  exit 2
}

INFO=$(borg info "$REPO::$LAST" 2>/dev/null)
TS=$(echo "$INFO" | awk -F: '/Time \(end\):/{sub(/^[^:]*: /, ""); print; exit}')
EPOCH=$(date -d "$TS" +%s 2>/dev/null || echo 0)
NOW=$(date +%s)
AGE_H=$(( (NOW - EPOCH) / 3600 ))

if [ "$AGE_H" -gt "$MAX_AGE_HOURS" ]; then
  curl -fsS "$HEARTBEAT_URL" --data "borg_stale=true,age_hours=$AGE_H,last=$LAST"
  exit 2
fi
echo "OK (last=$LAST, age=${AGE_H}h)"

То же самое в Enterno.io

Связку «cron + borg + ping» уберите в Enterno heartbeat с двумя расписаниями: «успешный backup» и «свежесть последнего» — двусторонняя гарантия что не потеряете данные.

Настроить Heartbeat monitor → ← Все рецепты

Похожие рецепты

Cron бэкапа тихо упал, никто не заметил, через неделю обнаружится при инциденте. Нужен алерт, если последний backup-файл старше 30 часов.