@@ -30,7 +30,7 @@ services:
|
||||
|
||||
```bash
|
||||
DB_FILE=/data/db.sqlite
|
||||
CRONTAB="00 06 * * *"
|
||||
CRONTAB=00 06 * * *
|
||||
DELETE_AFTER=10
|
||||
KEEP_LAST=10
|
||||
TZ=Asia/Novosibirsk
|
||||
@@ -94,10 +94,38 @@ HEALTHCHECK_UUID=00000000-0000-0000-0000-000000000000
|
||||
|
||||
Для self-hosted инстанса `HEALTHCHECK_URL` — это адрес его ping-эндпоинта, например `https://hc.domain.ru/ping`.
|
||||
|
||||
## Как передаётся окружение в cron
|
||||
## Планировщик
|
||||
|
||||
`crond` из busybox запускает джобы с пустым окружением, поэтому `entrypoint.sh`
|
||||
сохраняет env контейнера в `/tmp/container.env` (права 600), а cron-запись
|
||||
вызывает `/scripts/backup.sh --from-cron`, который его подгружает.
|
||||
Ручной запуск (`docker exec ... /scripts/backup.sh`) использует то окружение,
|
||||
`crond` из busybox не используется: под non-root uid (обычная ситуация в
|
||||
kubernetes с `securityContext.runAsUser`) он не загружает ни одного crontab и
|
||||
не сообщает об этом — в логе бесконечно идёт `wakeup dt=60`, а бекапов нет.
|
||||
Вместо него `entrypoint.sh` содержит свой планировщик на sh.
|
||||
|
||||
Что это даёт:
|
||||
|
||||
* работает под любым uid;
|
||||
* окружение наследуется напрямую, без выгрузки env в файл;
|
||||
* бекапы никогда не накладываются друг на друга — следующий запуск возможен
|
||||
только после завершения предыдущего;
|
||||
* некорректный `CRONTAB` роняет контейнер на старте с внятным сообщением
|
||||
(`[scheduler] FATAL: minute: '60' is outside 0-59`), а не приводит к тихому
|
||||
простою.
|
||||
|
||||
Синтаксис `CRONTAB` — стандартные пять полей: `*`, `5`, `1,15`, `2-6`, `*/15`,
|
||||
`8-18/2`, `30/5`. В месяцах и днях недели понимаются имена (`jan`, `mon`).
|
||||
Воскресенье — и `0`, и `7`. Если ограничены одновременно день месяца и день
|
||||
недели, запуск происходит при совпадении любого из них — как в `crontab(5)`.
|
||||
|
||||
При старте контейнера бекап делается сразу, эта минута считается отработанной.
|
||||
|
||||
Расписание видно в логе при запуске:
|
||||
|
||||
```
|
||||
[scheduler] schedule: 30 07 * * * (TZ=Asia/Novosibirsk, now 2026-09-02 16:45:21 +0700)
|
||||
[scheduler] expanded: min=[30] hour=[7] dom=[1 2 3 ...] mon=[1 2 ...] dow=[0 1 ...] day-match=and
|
||||
```
|
||||
|
||||
Ручной запуск: `docker exec ... /scripts/backup.sh` — использует то окружение,
|
||||
с которым его вызвали.
|
||||
|
||||
Период опроса часов — 20 секунд, меняется через `POLL_INTERVAL` (секунды).
|
||||
|
||||
Reference in New Issue
Block a user