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.
49 lines
2.2 KiB
Bash
49 lines
2.2 KiB
Bash
#!/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
|