Как создать виртуальную службу systemd для одновременной остановки / запуска нескольких экземпляров?

sudo service bluetooth restart

Это восстанавливает мою гарнитуру как устройство вывода в настройках звука gnome, поскольку она иногда пропадает. Гарнитура синхронизируется / соединяется / подключается, но не отображается на панели управления (или alsamixer), поэтому я не могу переключать аудиоустройства.

12
17.05.2016, 19:25
2 ответа

Вам нужно переместить строку

PartOf=app.service

из [Service] в раздел [Unit], и добавить в [Unit] из app.service список клиентов для запуска, например

Wants=app@customer1.service app@customer2.service

или, как сказал sourcejedi в комментариях, Requires= то же самое. Вы можете оставить PartOf для остановки служб, которые вы запускаете вручную и которых нет в вышеприведенном списке, например systemctl --user start app@customer3.service.

10
27.01.2020, 19:55

Я узнал, что это то, для чего нужны "Целевые единицы" systemd. Используя Target Unit, я получаю желаемые преимущества без необходимости создавать фальшивый раздел [Service] , который у меня был выше. Рабочий пример файла "Target Unit" выглядит следующим образом:

# named like app.target
[Unit]
Description=App Web Service

# This collection of apps should be started at boot time.
[Install]
WantedBy=multi-user.target

Затем каждый экземпляр клиента должен включать PartOf в раздел [Unit] (как указано @meuh) и также должен иметь раздел [Install] , чтобы enable и disable работали с определенной службой:

# In a file name like app@.service
[Unit]
Description=%I Instance of App Web Service
PartOf=app.target

[Service]
ExecStart=/home/mark/bin/app-poc.sh %i
Restart=on-failure
StandardOutput=journal

# When the service runs globally, make it run as a particular user for added security
#User=myapp
#Group=myapp

# When systemctl enable is used, make this start when the App service starts
[Install]
WantedBy=app.target

Чтобы вызвать экземпляр клиента и получить его start, когда цель запускается, используется эта одноразовая команда включения:

 systemctl enable app

Теперь на этом этапе я могу использовать stop и start в app @ customer ] для конкретного экземпляра, или я могу использовать запустить приложение и остановить приложение , чтобы остановить все приложения вместе.

17
27.01.2020, 19:55

Теги

Похожие вопросы