Да, есть несколько способов сделать это.
Самый простой (который выполняет некоторые из описанных вами действий, но не все) - создать целевой модуль и добавить зависимости от ваших сервисных модулей (например, Requires=zookeeper.service kafka.service elassandra.service
а также установить After=
те же модули). Целевой модуль полезен при запуске всех эти юниты вместе, но на самом деле это не поможет вам остановить их все вместе (использование systemctl stop
на целевом юните не остановит его зависимости.) Есть способы, которыми вы можете остановить юниты, например systemctl isolate multi-user.target
, остановите все юниты, которые не являются зависимостями этого цель, что означает, что юниты, запущенные вручную, будут остановлены, но это намного сильнее, чем остановка небольшого набора юнитов, так что, вероятно, не очень подходит ...
Возможно, лучшим подходом является использование PartOf=
директивы, которая в точности соответствует описанию. Вы можете либо создать «фиктивный» сервисный блок для совместного управления всеми сервисами, либо выбрать один из ваших сервисов, а другие сделать PartOf
этот сервис одним.
Вам необходимо настроить PartOf=
все модули, которые вы хотите запускать и останавливать вместе, в вашем случае zookeeper.service, kafka.service и elassandra.service. Но учтите, что вам не обязательно изменять сами файлы сервисного модуля (например, если они поставляются с самим программным обеспечением в пакетах deb или rpm.) Вы можете использовать файлы переопределения (которые вы можете создать с помощью systemctl edit
), чтобы добавить небольшой фрагмент конфигурации для существующего модуля, который позволит вам легко определить PartOf=
отношения между модулями, даже если они определены в файлах, которые вы предпочитаете не изменять.