systemd: Requires, RequiredBy, Wants, WantedBy, Before, After (формальное описание)

Обсуждение настройки и работы сервисов, резервирования, сетевых настроек и вопросов безопасности ОС.

Модератор: SLEDopit

Ответить
beroal
Сообщения: 6

systemd: Requires, RequiredBy, Wants, WantedBy, Before, After

Сообщение beroal »

Конечно, мы должны опираться на описание этих параметров в man systemd.unit, но, поскольку в manpage описание чрезвычайно многосложное и не слишком формальное (математическое), я попробовал составить своё описание.

Requires, RequiredBy, Wants, WantedBy, Before, After — 2-местные предикаты на unit-ах.
Requires'(A, B) := Requires(A, B) ∨ RequiredBy(B, A)
Wants'(A, B) := Wants(A, B) ∨ WantedBy(B, A)
After'(A, B) := After(A, B) ∨ Before(B, A)
Если After'(A, B), то активация A откладывается до момента, когда B будет активным.
Если Requires'(A, B) ∨ Wants'(A, B), то при активации A активируется B.
Если Requires'(A, B), то при деактивации B деактивируется A.
Спасибо сказали:
Аватара пользователя
MozG1986
Сообщения: 103
ОС: Mageia5, Mageia6

Re: systemd: Requires, RequiredBy, Wants, WantedBy, Before, After

Сообщение MozG1986 »

Возникла проблемка с этими зависимостями.

Задача - сделать так, чтобы:
а) сервис 2 останавливался перед остановкой или перезапуском сервиса 1
б) сервис 2 запускался после перезапуска сервиса 1, но только в том случае, если сервис 2 перед перезапуском сервиса 1 был запущен
в) сервис 2 не запускался после запуска или перезапуска сервиса 1, если сервис 2 до этого не был запущен.

Поигрался с зависимостями.
С "After= " все понятно, оно работает
Судя по man в моем случае нужно использовать в описании сервиса 2 зависимость "PartOf=service1"

И работает почти так как мне нужно. Проблема в том, что когда сервис 2 не запущен и я делаю перезапуск сервиса 1 - в конце упорно запускается сервис 2.
Спасибо сказали:
Аватара пользователя
MozG1986
Сообщения: 103
ОС: Mageia5, Mageia6

Re: systemd: Requires, RequiredBy, Wants, WantedBy, Before, After

Сообщение MozG1986 »

Вот. Отвечаю сам себе.

На багтрекере systemd описан этот баг. В новых версиях systemd баг не воспроизводится. Буду ставить из testing-репозитария.
Спасибо сказали:
Ответить