Как вы сообщаете системе, что цель удовлетворена одним из любых требований?

Как вы сообщаете systemd что требование удовлетворено одним из любого экземпляра из списка экземпляров?

Скажем, что у меня есть цель main_target.target и шаблон службы, называемый serv@.service . Во время нормальной работы единственными экземплярами службы serv@.service являются:

  • serv@ex1
  • serv@ex2
  • serv@ex3

Только один из этих экземпляров существует в любой момент времени, и я хочу сообщить main_target.target что он удовлетворен всякий раз, когда существует какой-либо из трех экземпляров.

Интуитивно я хотел бы что-то похожее на тег require_any SMF, но я не смог найти ничего подобного в любой документации systemd .

Примечание 1: Я знаю, что я могу сделать serv@ex1 , serv@ex2 , serv@ex3 и взаимоисключающим директивой Conflicts= .

Примечание 2: Я также знаю, что я могу использовать директивы Before= и After= для того, чтобы три экземпляра запускались в определенном порядке.

Как вы упомянули, вы можете сделать эти сервисы взаимоисключающими с помощью директивы Conflicts= . Цели systemd – это всего лишь метод группировки единиц, у них нет сложных зависимостей.

systemd.target

Файл конфигурации устройства, имя которого заканчивается на «.target», кодирует информацию о целевом модуле systemd, который используется для группировки единиц и как хорошо известные точки синхронизации во время запуска.

Этот тип устройства не имеет конкретных опций. См. Systemd.unit (5) для общих опций всех файлов конфигурации устройства. Общие элементы конфигурации настраиваются в общих разделах [Unit] и [Install]. Отдельного раздела [Целевая] не существует, так как не могут быть настроены параметры, специфичные для конкретной цели.

systemd.unit для справки.

Вы можете использовать директивы, включенные в systemd.unit , и не включать метод для запуска только одной из нескольких служб.