Commit graph

1 commit

Author SHA1 Message Date
bot-backend
e576f8c256 chore(ops): развести crontab по хостам под переезд
All checks were successful
CI Trade-In / changes (pull_request) Successful in 9s
CI Trade-In / backend-tests (pull_request) Has been skipped
CI Trade-In / browser-tests (pull_request) Has been skipped
CI / changes (pull_request) Successful in 10s
CI Trade-In / frontend-checks (pull_request) Has been skipped
CI / frontend-tests (pull_request) Has been skipped
CI / openapi-codegen-check (pull_request) Successful in 2m1s
CI / backend-tests (pull_request) Successful in 17m15s
Сегодняшний crontab Beget'а обслуживает ОБА контура сразу — и остающийся
(Forgejo), и уезжающий (tradein/gendesign). После 30.08 это перестанет
быть верным, а сам crontab об этом не узнает.

Пять записей начнут ходить в контейнеры, которых на Beget больше нет:

  0  5 * * *  backfill_houses_dadata      docker exec tradein-backend
  30 5 * * *  geocode_deals_from_houses   docker exec tradein-backend
  45 5 * * *  geocode_deals_nominatim     docker exec tradein-backend
  30 4 * * *  backup-tradein-db.sh        dump из tradein-postgres
  30 3 * * *  ops/backup.sh               dump из gendesign-postgres

Падающие по ночам задачи — ещё полбеды. Хуже, что вместе с ними перестанут
обновляться sentinel'ы бэкапов; сторож честно это заметит и упрётся в то,
что канал оповещения не настроен (#2203: TELEGRAM_* нет ни в одном
env-файле). То есть бэкапы обоих продуктовых кластеров пропадут МОЛЧА.

Зеркальный и более опасный случай: если на Poincare crontab не установить
вовсе, там не будет НИ ОДНОГО бэкапа — и узнать об этом неоткуда, потому
что сторож пропущенных прогонов живёт в том же crontab'е. Отсутствие
бэкапов обнаружилось бы в момент, когда они понадобятся.

Поэтому два эталонных файла, а не инструкция в раннбуке: переход должен
быть явным действием (`crontab ops/crontab-<хост>.cron`), а не «забыли
поправить».

Разбор по хостам:
  Beget    — backup-forgejo.sh + его сторож + docker-prune (здесь остаются
             CI-раннеры, их тома и растут)
  Poincare — оба продуктовых бэкапа + два их сторожа + три задачи
             обогащения/геокодирования + СВОЙ docker-prune

docker-prune нужен на обоих: на Beget он чистит тома раннеров, на Poincare
образы продуктового стека. Это не «переехавшая» запись, а две разные.

Заодно логи переведены с /tmp на /opt/gendesign/logs: половина записей
писала в /tmp, который чистится при перезагрузке — именно поэтому историю
отказов бэкапов раньше не удавалось восстановить.

Времена оставлены прежние: чтобы при разборе後 переезда не гадать, что
изменилось — поведение или расписание.

`ops/*.cron` добавлен в paths deploy.yml: файлы не исполняются деплоем, но
должны физически лежать в /opt/gendesign, иначе в окне их нечем будет
установить (тот же класс, что #2887).

Проверено: 11 расписаний разобраны построчно — 5 полей + команда, ошибок 0;
deploy.yml остаётся валидным YAML.

Refs #3059, #3057, #2203
2026-08-24 04:46:18 +03:00