timers

Systemd timers по slug

Для каждого garden timer и service называются по slug:

<slug>-pull.timer
<slug>-pull.service

Для текущего production garden:

obsidian-duck-guide-pull.timer
obsidian-duck-guide-pull.service

Посмотреть статус

sudo systemctl status obsidian-duck-guide-pull.timer
sudo systemctl status obsidian-duck-guide-pull.service

Коротко:

systemctl list-timers | grep obsidian-duck-guide

Через gardenctl:

cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl timer-status obsidian-duck-guide

Логи service

journalctl -u obsidian-duck-guide-pull.service -n 100 --no-pager

Live logs:

journalctl -u obsidian-duck-guide-pull.service -f

Через gardenctl:

./gardenctl logs obsidian-duck-guide

Остановить auto-update

Остановить активный timer сейчас:

sudo systemctl stop obsidian-duck-guide-pull.timer

Отключить автозапуск после reboot:

sudo systemctl disable obsidian-duck-guide-pull.timer

Обычно делаем обе команды сразу:

sudo systemctl disable --now obsidian-duck-guide-pull.timer

Это значит: остановить сейчас и больше не включать автоматически.

Через gardenctl:

./gardenctl pause obsidian-duck-guide

Остановить уже запущенный rebuild

Timer может быть выключен, но service уже мог стартануть.

Остановить service:

sudo systemctl stop obsidian-duck-guide-pull.service

Проверить lock:

sudo lslocks | grep obsidian-duck-guide-deploy || true

Через gardenctl:

./gardenctl stop-service obsidian-duck-guide

Включить auto-update обратно

sudo systemctl enable --now obsidian-duck-guide-pull.timer

Проверить:

systemctl list-timers | grep obsidian-duck-guide

Через gardenctl:

./gardenctl resume obsidian-duck-guide

Запустить auto-update вручную один раз

Через systemd:

sudo systemctl start obsidian-duck-guide-pull.service

Через gardenctl для принудительной чистой пересборки:

cd /home/supervisor/leonid_projects/duck-obsidian/.deploy
./gardenctl rebuild obsidian-duck-guide

Для всех gardens сразу

Посмотреть все garden timers:

systemctl list-timers '*-pull.timer'

Остановить все timers:

sudo systemctl stop '*-pull.timer'

Отключить автозапуск всех timers:

sudo systemctl disable '*-pull.timer'

Включить обратно все существующие timers:

sudo systemctl enable --now '*-pull.timer'

В production безопаснее работать по одному garden, чтобы случайно не выключить лишнее:

sudo systemctl disable --now obsidian-duck-guide-pull.timer
sudo systemctl stop obsidian-duck-guide-pull.service

Когда ручные правки закончены:

sudo systemctl enable --now obsidian-duck-guide-pull.timer

Что делает timer

Timer запускает service:

<slug>-pull.service

Service запускает:

/home/supervisor/leonid_projects/obsidians/<slug>/pull-and-rebuild.sh

Скрипт:

1. Берёт lock.
2. Делает git fetch origin main.
3. Сравнивает local и remote commit SHA.
4. Rebuild выполняется только при изменениях, отсутствии dist/index.html, FORCE_REBUILD=1 или HARD_CLEAN=1.
5. Запускает Docker build service.
6. Перезапускает Caddy только после успешной сборки.

Дальше: production rebuild.