#!/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