#!/bin/bash
# ═══════════════════════════════════════════════════════════
# Главный скрипт бэкапов
# ═══════════════════════════════════════════════════════════
#
# Использование:
# ./backup.sh # Полный бэкап (db + etc)
# ./backup.sh --db # Только БД
# ./backup.sh --etc # Только конфиги
# ./backup.sh --check # Проверить статус бэкапов
#
# ═══════════════════════════════════════════════════════════
# Загрузка переменных платформы
source /opt/claude-workspace/system/config/platform-vars.sh 2>/dev/null || {
DATASPACE=${DATASPACE:-/mnt/beget-s3}
}
set -e
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BACKUP_DIR="$DATASPACE/backups"
# Цвета
GREEN='\033[0;32m'
RED='\033[0;31m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m'
log() {
echo -e "${BLUE}[BACKUP]${NC} $1"
}
header() {
echo ""
echo -e "${YELLOW}═══════════════════════════════════════════${NC}"
echo -e "${YELLOW} $1${NC}"
echo -e "${YELLOW}═══════════════════════════════════════════${NC}"
echo ""
}
# Проверка статуса бэкапов
check_status() {
header "Статус бэкапов"
echo "Директория: $BACKUP_DIR"
echo ""
if [ ! -d "$BACKUP_DIR" ]; then
echo -e "${RED}Директория не существует!${NC}"
exit 1
fi
echo "=== БД ==="
if [ -d "$BACKUP_DIR/db" ]; then
LATEST_DB=$(find "$BACKUP_DIR/db" -name "*.sql.gz" -type f -printf '%T@ %p\n' 2>/dev/null | sort -n | tail -1 | cut -d' ' -f2-)
if [ -n "$LATEST_DB" ]; then
AGE=$(( ($(date +%s) - $(stat -c %Y "$LATEST_DB")) / 3600 ))
SIZE=$(du -h "$LATEST_DB" | cut -f1)
echo -e " Последний: $(basename "$LATEST_DB")"
echo -e " Возраст: ${AGE}ч"
echo -e " Размер: $SIZE"
else
echo -e " ${RED}Нет бэкапов${NC}"
fi
else
echo -e " ${RED}Директория не существует${NC}"
fi
echo ""
echo "=== Конфиги ==="
if [ -d "$BACKUP_DIR/etc" ]; then
LATEST_ETC=$(find "$BACKUP_DIR/etc" -name "etc_*.tar.gz" -type f -printf '%T@ %p\n' 2>/dev/null | sort -n | tail -1 | cut -d' ' -f2-)
if [ -n "$LATEST_ETC" ]; then
AGE=$(( ($(date +%s) - $(stat -c %Y "$LATEST_ETC")) / 3600 ))
SIZE=$(du -h "$LATEST_ETC" | cut -f1)
echo -e " Последний: $(basename "$LATEST_ETC")"
echo -e " Возраст: ${AGE}ч"
echo -e " Размер: $SIZE"
else
echo -e " ${RED}Нет бэкапов${NC}"
fi
else
echo -e " ${RED}Директория не существует${NC}"
fi
echo ""
echo "=== Общий размер ==="
du -sh "$BACKUP_DIR"/* 2>/dev/null || echo " Пусто"
}
# Бэкап БД
backup_db() {
header "Бэкап PostgreSQL"
bash "$SCRIPT_DIR/backup_db.sh"
}
# Бэкап конфигов
backup_etc() {
header "Бэкап конфигураций"
bash "$SCRIPT_DIR/backup_etc.sh"
}
# Полный бэкап
backup_full() {
log "Запуск полного бэкапа..."
backup_db
backup_etc
header "Готово"
check_status
}
# Разбор аргументов
case "${1:-}" in
--db)
backup_db
;;
--etc)
backup_etc
;;
--check)
check_status
;;
--help|-h)
echo "Использование: $0 [--db|--etc|--check|--help]"
echo ""
echo " --db Бэкап только PostgreSQL"
echo " --etc Бэкап только конфигов"
echo " --check Показать статус бэкапов"
echo " (пусто) Полный бэкап"
;;
*)
backup_full
;;
esac