Pytanie Jak zdefiniować usługę systemd aktywowaną d-bus?


Czy ktoś ma przykład lub link do przykładu, jak zdefiniować systemd .service, który jest aktywowany przez d-bus?

Rozumiem, że jeśli tutaj utworzę plik test.service:

/usr/share/dbus-1/services/test.service

Z następującą treścią:

[D-BUS Service]
Name=org.me.test
Exec="/tmp/testamundo.sh"

Czy usługa może być teraz uruchomiona / zatrzymana poprzez wywołania d-bus do systemd.Manager? Jeśli tak to jak?


10
2017-07-29 13:51


pochodzenie




Odpowiedzi:


Przyjrzyjmy się jednej z usług nadchodzących z systemd, nazwanej hostem.

# cat /usr/share/dbus-1/system-services/org.freedesktop.hostname1.service

#  This file is part of systemd.
#
#  systemd is free software; you can redistribute it and/or modify it
#  under the terms of the GNU Lesser General Public License as published by
#  the Free Software Foundation; either version 2.1 of the License, or
#  (at your option) any later version.

[D-BUS Service]
Name=org.freedesktop.hostname1
Exec=/bin/false
User=root
SystemdService=dbus-org.freedesktop.hostname1.service

Magia jest SystemdService= dyrektywa. Usługa określona przy pomocy SystemdService= jest tym, co dbus-daemon prosi systemd o aktywację.

Oczekujemy usługi o nazwie dbus-org.freedesktop.hostname1.service w katalogu usług systemd.

# readlink /usr/lib/systemd/system/dbus-org.freedesktop.hostname1.service
systemd-hostnamed.service

W takim razie skorzystaj z usługi dbus org.freedesktop.hostname1.service informuje systemd, aby aktywował usługę systemd systemd-hostnamed.service.

A usługa systemd wygląda

# cat /usr/lib/systemd/system/systemd-hostnamed.service
...
...
[Service]
BusName=org.freedesktop.hostname1
...
...

Magia w pliku usług systemowych jest BusName= dyrektywa. Dyrektywa ta nakazuje systemd poczekać, aż określona nazwa magistrali pojawi się na magistrali przed kontynuowaniem.

Uwaga: Usługa dbus ma zupełnie inną składnię niż usługa systemd. Potrzebujesz obu, aby mieć demona aktywowanego dbus.


11
2017-07-30 13:26



Dziękuję za to wyjaśnienie, to naprawdę wyjaśniło mi wszystko! - Zugdud
@Umut Mam ten sam rodzaj problemu, ale w moim przypadku aktywacja dbus powinna się zdarzyć w porównaniu z magistralą sesji, a nie systemem. Czy możesz podać jakieś wskazówki? - ASB


Aby rozszerzyć odpowiedź Umut:

W pliku definicji usługi systemd znajduje się także:

# cat /usr/lib/systemd/system/systemd-hostnamed.service
...
...
[Install]
Alias=dbus-org.freedesktop.hostname1.service
...
...

To zapewnia, że /usr/lib/systemd/system/dbus-org.freedesktop.hostname1.service dowiązanie symboliczne jest instalowane podczas włączania usługi.

Powód, dla którego wskazuje definicja usługi dbus dbus-org.freedesktop.hostname1.service i nie systemd-hostnamed.service jest wyłącznie dla wygody. W ten sposób staje się jasne, że usługa nazwana dbus jest aktywowana. Możesz wskazać bezpośrednio na rzeczywistą usługę i pominąć dowiązanie symboliczne i linię w [Install] Sekcja


2
2017-09-03 11:33