Группировка системных сервисов

10

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

Какой лучший способ сделать это?

Магнус
источник

Ответы:

10

Вы хотите единицу целевого типа со всеми сервисными единицами, перечисленными как Wants=зависимости. Тогда вы начинаете это использовать systemctl start unitname.target. (Убедитесь, что не используете systemctl isolateздесь; это закроет все, кроме того, что находится в дереве зависимостей ваших сервисов, которое вы, вероятно, не хотите.)

Том Хант
источник
В качестве альтернативы, вы можете использовать WantedByключ в [Install]разделе и отметить уже существующую цель. Например, если вы хотите, чтобы ваши службы всегда запускались до входа других пользователей, используйте multi-user.target.
saiarcot895
Да, целевой тип с Wants=перечислением всех сервисов кажется достаточным для запуска , однако я не могу найти способ заставить остановку и перезапуск работать с использованием целевого типа. Есть тип, который позволяет это?
Магнус
Магнус, ты когда-нибудь находил хорошее решение для этого?
Сэм Хендли,
2
Сэм, Магнус: Похоже, что остановить нужные сервисы .targetможно с помощью StopWhenUnneeded=yesкаждого .serviceфайла. superuser.com/questions/470153/…
Джоннор
1
В моем конкретном случае я могу использовать инструменты systemd, обрабатывающие глобирование :) Итак, для запуска я использую a .targetи для остановки, которую я использую systemctl stop foo.\*(поскольку все задействованные сервисы имеют служебные файлы, начинающиеся с остроумия foo.).
Магнус
2

Вы пробовали использовать PartOfв подразделениях целевой группы в дополнение к Wantsцели? Пример: PartOf=foo.targetв foo-sub1.serviceи Wants=foo-sub1.service foo-sub2.serviceв foo.target. Я только что попробовал это и смог запустить и остановить все мои подразделения, просто запустив и остановив цель.

PartOf =

Настраивает зависимости, подобные «Требуется =», но ограничивается остановкой и перезапуском юнитов. Когда systemd останавливает или перезапускает перечисленные здесь модули, действие распространяется на этот модуль. Обратите внимание, что это односторонняя зависимость - изменения в этом модуле не влияют на перечисленные модули.

Когда PartOf = b.service используется в a.service, эта зависимость будет отображаться как ConsistsOf = a.service в списке свойств b.service. ConsistsOf = зависимость не может быть указана напрямую.

Бенни Джобиган
источник
Добро пожаловать в U & L! Если ваше сообщение не дает ответа на вопрос, то оно должно быть размещено в разделе комментариев ниже вопроса.
Юрий Гончарук
Это обеспечивает другую половину ответа Тома Ханта - возможность остановить целую группу услуг.
Бенни Джобиган