Files
homelab-docs/scripts/notify-vzdump-success.sh
Andrey f319133cee Add notification feature to backup scripts for various services
Enhance backup scripts for Nextcloud, Gitea, Paperless, Vaultwarden, Immich, and VPS configurations by adding Telegram notifications upon completion. Include details such as backup size and objects backed up. Update backup documentation to reflect these changes and ensure clarity on backup processes and retention policies.
2026-02-27 20:42:30 +03:00

49 lines
2.2 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# Проверяет каталог локальных vzdump за последние 2 часа и отправляет в Telegram сводку.
# Задание Proxmox Backup выполняется в 02:00; этот скрипт запускают по cron в 03:00.
# Использование: notify-vzdump-success.sh [путь_к_dump]
# По умолчанию: /mnt/backup/proxmox/dump/dump/
DUMP_DIR="${1:-/mnt/backup/proxmox/dump/dump}"
NOTIFY_SCRIPT="${NOTIFY_SCRIPT:-/root/scripts/notify-telegram.sh}"
# Файлы, изменённые за последние 120 минут (2 часа)
MAX_AGE_MIN=120
if [ ! -d "$DUMP_DIR" ]; then
exit 0
fi
if [ ! -x "$NOTIFY_SCRIPT" ]; then
exit 0
fi
# Список файлов vzdump, изменённых за последние MAX_AGE_MIN минут
RECENT=$(find "$DUMP_DIR" -maxdepth 1 -type f \( -name 'vzdump-*.tar.zst' -o -name 'vzdump-*.vma.zst' -o -name 'vzdump-*.vma' \) -mmin "-$MAX_AGE_MIN" 2>/dev/null)
if [ -z "$RECENT" ]; then
exit 0
fi
COUNT=$(echo "$RECENT" | grep -c . 2>/dev/null || echo 0)
[ "$COUNT" -eq 0 ] && exit 0
TOTAL_BYTES=$(echo "$RECENT" | while read -r f; do stat -c %s "$f" 2>/dev/null; done | awk '{s+=$1} END {print s+0}')
[ -z "$TOTAL_BYTES" ] && TOTAL_BYTES=0
# Размер в ГБ (округление до 2 знаков; если bc нет — целое число)
TOTAL_GB=$(echo "scale=2; $TOTAL_BYTES / 1024 / 1024 / 1024" | bc 2>/dev/null)
[ -z "$TOTAL_GB" ] && TOTAL_GB="$((TOTAL_BYTES / 1024 / 1024 / 1024))"
# Время последнего изменения (последний записанный файл = время завершения бэкапа)
LATEST_MTIME=$(echo "$RECENT" | while read -r f; do stat -c %Y "$f" 2>/dev/null; done | sort -n | tail -1)
FINISH_TIME=""
[ -n "$LATEST_MTIME" ] && FINISH_TIME=$(date -d "@$LATEST_MTIME" +%H:%M 2>/dev/null) || true
BODY="Резервное копирование завершено.
Объекты: локальный vzdump (LXC/VM). Контейнеров/ВМ: $COUNT.
Размер копии: ${TOTAL_GB} ГБ."
[ -n "$FINISH_TIME" ] && BODY="${BODY}
Время завершения: ${FINISH_TIME}."
"$NOTIFY_SCRIPT" "💾 Backup local" "$BODY" || true
exit 0