sudo service bluetooth restart
Это восстанавливает мою гарнитуру как устройство вывода в настройках звука gnome, поскольку она иногда пропадает. Гарнитура синхронизируется / соединяется / подключается, но не отображается на панели управления (или alsamixer), поэтому я не могу переключать аудиоустройства.
Вам нужно переместить строку
PartOf=app.service
из [Service]
в раздел [Unit]
, и добавить в [Unit]
из app.service
список клиентов для запуска, например
Wants=app@customer1.service app@customer2.service
или, как сказал sourcejedi в комментариях, Requires=
то же самое. Вы можете оставить PartOf
для остановки служб, которые вы запускаете вручную и которых нет в вышеприведенном списке, например systemctl --user start app@customer3.service
.
Я узнал, что это то, для чего нужны "Целевые единицы" 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
] для конкретного экземпляра, или я могу использовать запустить приложение
и остановить приложение
, чтобы остановить все приложения вместе.