Назад | Перейти на главную страницу

systemd: установка зависимостей между шаблонными модулями таймера?

Я использую несколько шаблонных таймеров для запуска наборов шаблонных служб. Есть задания резервного копирования и связанные с ними задачи обслуживания, которые требуют монопольной блокировки репозитория резервных копий и не могут выполняться одновременно с заданиями резервного копирования. Я пытаюсь понять, как настроить блоки, чтобы задания выполнялись правильно.

Например, у меня есть следующие шаблоны услуг:

У меня есть следующие шаблоны таймеров:

Где backup-daily@.timer единица запускает соответствующий backup@.service экземпляр и может выглядеть примерно так:

[Unit]
Description=daily backup of %i

[Timer]
OnCalendar=daily
Unit=backup@%i.service

[Install]
WantedBy=timers.target

Если я сбегу ...

systemctl enable --now backup-daily@foo.timer clean-daily@foo.timer

... Мне нужно убедиться, что служба clean @ foo не запускается до завершения службы резервного копирования @ foo.

Единственное решение, которое я придумал, - это отказаться от OnCalendar=daily и вместо этого используйте явное время начала, чтобы я мог гарантировать задания резервного копирования Начало сначала (например, запускать задания резервного копирования в 01:00, а работы по обслуживанию в 2:00), а затем использовать какую-то блокировку (например, flock), чтобы гарантировать, что задания обслуживания не начнутся, пока не будут завершены задания резервного копирования.

Это работает, но немного взломано. Если есть лучший способ решить эту проблему с помощью systemd, я хотел бы это выяснить.

Подумав немного над этим вопросом, можно получить очевидный ответ: в clean@.service шаблон, добавьте зависимость от соответствующего backup@.service например, вот так:

[Unit]
After=backup@%i.service

Это нормально работает, пока службы запускаются параллельно. Я не знаю прямо сейчас, если услуги с такими же OnCalendar установка запускаются параллельно - нет; Я обновлю этот ответ, как только разберусь с ним.