Бэкап пропускает прогон, если контур на VPS не запущен
- добавлена проверка запущенных сервисов контура на VPS перед выгрузкой - если clickhouse не запущен или каталога проекта нет, скрипт пишет причину в лог и выходит с кодом 0 - ошибки ssh по-прежнему считаются ошибкой и возвращают ненулевой код - версия 0.3.8
This commit is contained in:
parent
a28bd622c7
commit
c524d20259
|
|
@ -112,6 +112,9 @@ Cron на домашнем сервере (вчерашний день уже з
|
|||
Ошибка на любом шаге оставляет данные на VPS (партиции не удаляются) и пишет понятный лог.
|
||||
Импорт дня идемпотентен: повторный прогон не дублирует строки.
|
||||
|
||||
Если контур на VPS не запущен (нет работающего `clickhouse` или не найден каталог проекта),
|
||||
скрипт пишет об этом в лог и завершается с кодом 0 — для cron это не ошибка.
|
||||
|
||||
## Обновление и откат
|
||||
|
||||
```bash
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ make backup E=test # на домашнем сервере: ./scripts/clickho
|
|||
|
||||
## Версионирование
|
||||
|
||||
- Единый источник версии — `common/version.py` (`__version__`), текущая — `0.3.7`.
|
||||
- Единый источник версии — `common/version.py` (`__version__`), текущая — `0.3.8`.
|
||||
- Схема — SemVer-подобная (`MAJOR.MINOR.PATCH`); git-тег = `v` + версия (`v0.1`).
|
||||
- Docker-образы тегируются версией (Блок 2), события ClickHouse получают `bot_version` (Блок 3).
|
||||
- Выпуск: изменить `common/version.py` → коммит → аннотированный тег `vX.Y` → `git push --tags`.
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
__version__ = "0.3.7"
|
||||
__version__ = "0.3.8"
|
||||
|
|
|
|||
|
|
@ -59,12 +59,34 @@ exec docker compose -p "$contour" --env-file "env/$contour.env" -f "$compose_fil
|
|||
REMOTE
|
||||
}
|
||||
|
||||
# Какие сервисы контура запущены на VPS (пусто, если проекта/контура нет).
|
||||
vps_running_services() {
|
||||
"${SSH[@]}" bash -s "$VPS_PROJECT_DIR" "$E" "$VPS_COMPOSE_FILE" <<'REMOTE'
|
||||
set -uo pipefail
|
||||
if [ ! -d "$1" ]; then
|
||||
echo "каталог проекта $1 на VPS не найден" >&2
|
||||
exit 0
|
||||
fi
|
||||
cd "$1" || exit 0
|
||||
docker compose -p "$2" --env-file "env/$2.env" -f "$3" ps --services --status running 2>/dev/null || true
|
||||
REMOTE
|
||||
}
|
||||
|
||||
DAY="$(TZ="$BACKUP_TZ" date -d 'yesterday' '+%Y-%m-%d')"
|
||||
PARTITION="${DAY//-/}"
|
||||
GRACE_CUTOFF="$(TZ="$BACKUP_TZ" date -d "${BACKUP_GRACE_DAYS} days ago" '+%Y%m%d')"
|
||||
|
||||
log "Бэкап событий контура ${E} за ${DAY} (грейс ${BACKUP_GRACE_DAYS} дней, порог ${GRACE_CUTOFF})"
|
||||
|
||||
# Бот может быть не запущен (или ещё не развёрнут) — это не ошибка, просто пропускаем прогон.
|
||||
if ! RUNNING="$(vps_running_services)"; then
|
||||
fail "не удалось получить состояние контура ${E} на VPS (проверьте ssh и VPS_SSH)"
|
||||
fi
|
||||
if ! grep -qx 'clickhouse' <<<"$RUNNING"; then
|
||||
log "Контур ${E} на VPS не запущен — бэкап пропущен, на VPS ничего не меняем"
|
||||
exit 0
|
||||
fi
|
||||
|
||||
mkdir -p "$BACKUP_DIR"
|
||||
ARCHIVE="${BACKUP_DIR}/events_${DAY}.parquet.gz"
|
||||
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@ from common import __version__
|
|||
|
||||
def test_version_is_set():
|
||||
assert __version__
|
||||
assert __version__ == "0.3.7"
|
||||
assert __version__ == "0.3.8"
|
||||
|
|
|
|||
Loading…
Reference in New Issue