Borg — алерт когда backup упал или старее N часов
Borg backup упал (passphrase rotated, repo lock завис, ssh-ключ expired) — узнаешь только когда нужно restore, и крайний снапшот неделю назад.
Рецепт
#!/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» и «свежесть последнего» — двусторонняя гарантия что не потеряете данные.
Похожие рецепты
Cron бэкапа тихо упал, никто не заметил, через неделю обнаружится при инциденте. Нужен алерт, если последний backup-файл старше 30 часов.
Нужно убедиться, что сайт возвращает 2xx каждую минуту, и получить алерт в Slack/Telegram при падении.
Самоподписанный скрипт проверяет SSL сертификат и шлёт алерт за 14 дней до expiry.