gendesign/ops/crontab-poincare.cron
lekss361 2feb0de446
All checks were successful
Deploy Infra Host / sync-infra-host (push) Successful in 2s
Deploy / changes (push) Successful in 7s
Deploy / build-backend (push) Has been skipped
Deploy / build-worker (push) Has been skipped
Deploy Trade-In / changes (push) Successful in 12s
Deploy / build-frontend (push) Has been skipped
Deploy / deploy-caddy (push) Has been skipped
Deploy Trade-In / build-browser (push) Successful in 45s
Deploy / deploy (push) Successful in 1m45s
Deploy / deploy-status (push) Successful in 1s
Deploy / perimeter-smoke (push) Successful in 10s
Deploy Trade-In / build-frontend (push) Successful in 2m35s
Deploy Trade-In / test (push) Successful in 3m53s
Deploy Trade-In / build-backend (push) Successful in 34s
Deploy Trade-In / deploy (push) Successful in 2m21s
Deploy Trade-In / deploy-status (push) Successful in 1s
Deploy Trade-In / perimeter-smoke (push) Successful in 10s
fix(ops): бэкап без выгрузки в S3 падает, а не рапортует успех (#3086)
2026-08-24 17:50:18 +00:00

69 lines
6.8 KiB
Text
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# crontab ПРИНИМАЮЩЕГО хоста (Selectel Poincare, 188.246.224.93) — после 30.08.
#
# Устанавливать СРАЗУ после того, как стек поднялся и смоук прошёл:
# mkdir -p /opt/gendesign/logs
# crontab /opt/gendesign/ops/crontab-poincare.cron
# crontab -l # сверить
#
# Перед установкой в /etc/default/ должны лежать (root-owned, chmod 600,
# НЕ в git, переносятся руками с предыдущего хоста или создаются заново):
# /etc/default/gendesign-backup — S3_ENDPOINT/S3_BUCKET/S3_ACCESS_KEY/S3_SECRET_KEY
# (см. ops/gendesign-backup.default.example)
# /etc/default/tradein-backup — свои S3_*, либо отсутствует (тогда
# backup-tradein-db.sh падает на общий
# /etc/default/gendesign-backup выше)
# Без них ops/backup.sh и backup-tradein-db.sh теперь падают громко (#3085),
# а не молча пишут локальный бэкап.
#
# ⚠️ САМЫЙ ОПАСНЫЙ ПРОПУСК ВСЕГО ПЕРЕЕЗДА. Если этот файл не установить,
# на новом хосте НЕ БУДЕТ НИ ОДНОГО БЭКАПА — ни tradein, ни gendesign. И узнать
# об этом будет неоткуда: сторож пропущенных прогонов (check-backup-staleness)
# сам живёт в этом же crontab'е, то есть его тоже не будет. Отсутствие бэкапов
# обнаружится в момент, когда они понадобятся.
#
# Времена оставлены те же, что были на Beget — чтобы не гадать, изменилось ли
# поведение из-за переезда или из-за нового расписания. Подгонять окна имеет
# смысл ПОСЛЕ того, как всё поедет стабильно.
# ── Бэкапы обоих кластеров ──────────────────────────────────────────────────
# Off-box выгрузка в S3 включается через /etc/default/tradein-backup и
# /etc/default/gendesign-backup — файлы НЕ переезжают сами (в git их нет и не
# должно быть), их нужно перенести руками. Без них оба скрипта падают ГРОМКО
# (exit 1, дамп не снимается вовсе) — см. #3085; они больше НЕ пишут молча
# локальный бэкап.
30 3 * * * bash /opt/gendesign/ops/backup.sh >> /opt/gendesign/logs/gendesign-backup.log 2>&1
30 4 * * * bash /opt/gendesign/tradein-mvp/deploy/backup-tradein-db.sh >> /opt/gendesign/logs/tradein-backup.log 2>&1
# Сторожа пропущенных прогонов, порог 26ч. Едут вместе со своими бэкапами:
# сторож должен жить там же, где sentinel, иначе он сторожит файл, который
# никто не обновляет, и кричит вечно.
0 * * * * bash /opt/gendesign/ops/check-backup-staleness.sh /opt/gendesign/backups/.last_success 26 "gendesign main backup" >> /opt/gendesign/logs/backup-staleness.log 2>&1
0 * * * * bash /opt/gendesign/ops/check-backup-staleness.sh /opt/gendesign/backups/tradein/.last_success 26 "tradein backup" >> /opt/gendesign/logs/backup-staleness.log 2>&1
# ── Restore-дрель, раз в месяц (#3085) ───────────────────────────────────────
# Восстановимость дампа никогда не проверялась автоматически — только
# ручными прогонами. 1-е число месяца, 02:15 — до ночных бэкапов (03:30/04:30)
# и до обогащения/геокодинга (05:00-05:45), не пересекается ни с чем.
# Берёт САМЫЙ СВЕЖИЙ на тот момент main-дамп; ops/restore-drill.sh сам найдёт
# рядом лежащий globals-файл и сам снесёт свой временный контейнер — прод не
# трогает никогда (см. заголовок скрипта).
15 2 1 * * bash -c 'f=$(ls -t /opt/gendesign/backups/gendesign_[0-9]*.sql.gz 2>/dev/null | head -1); if [ -n "$f" ]; then bash /opt/gendesign/ops/restore-drill.sh "$f"; else echo "no gendesign dump found to drill"; exit 1; fi' >> /opt/gendesign/logs/restore-drill.log 2>&1
# ── Обогащение и геокодирование (ходят в tradein-backend) ───────────────────
0 5 * * * cd /opt/gendesign/tradein-mvp && docker exec tradein-backend python -m scripts.backfill_houses_dadata --limit 100 --priority both >> /opt/gendesign/logs/dadata-backfill.log 2>&1
30 5 * * * cd /opt/gendesign/tradein-mvp && docker exec tradein-backend python -m scripts.geocode_deals_from_houses --limit 50000 >> /opt/gendesign/logs/deals-geocode.log 2>&1
45 5 * * * cd /opt/gendesign/tradein-mvp && docker exec tradein-backend python -m scripts.geocode_deals_nominatim --limit 5000 >> /opt/gendesign/logs/deals-nominatim.log 2>&1
# ── Уборка докера ───────────────────────────────────────────────────────────
# СВОЯ запись, не «переехавшая»: на Beget она чистит тома CI-раннеров, здесь —
# образы продуктового стека. Нужны обе, на обоих хостах.
0 4 * * 0 bash /opt/gendesign/ops/docker-prune.sh >> /opt/gendesign/logs/docker-prune.log 2>&1
# ── Логи: /opt/gendesign/logs, а не /tmp ────────────────────────────────────
# На Beget половина записей писала в /tmp — он чистится при перезагрузке, и
# именно поэтому историю отказов бэкапов там восстановить не удавалось.
# Каталог создать до установки crontab: mkdir -p /opt/gendesign/logs
#
# ── ЧЕГО ЗДЕСЬ НЕТ ──────────────────────────────────────────────────────────
# backup-forgejo.sh + его сторож — Forgejo остаётся на Beget
# (см. ops/crontab-beget.cron)