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.
This commit is contained in:
2026-02-27 20:42:30 +03:00
parent 56cee83198
commit f319133cee
21 changed files with 1048 additions and 168 deletions

View File

@@ -0,0 +1,48 @@
#!/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