d-bus: service management

Для новичков как вообще в Linux, так и в конкретной теме, к которой относится вопрос.

Модератор: Bizdelnick

IMB
Сообщения: 2567
ОС: Debian

d-bus: service management

Сообщение IMB »

Доброго дня!
D-Bus поддерживает запуск программ/демонов через service-файл, но что-то я не могу найти как их можно остановить.
Неужто только через внешний скрипт или сигнал, D-Bus не предоставляет такого?
Спасибо.
Спасибо сказали:
Аватара пользователя
Red Gremlin
Сообщения: 512
Статус: самоучка
ОС: Rosa 2016 Fresh

Re: d-bus: service management

Сообщение Red Gremlin »

DBus — это способ обмена информации между приложениями, запуск/остановка сервисов через DBus — этим systemd занимается, не DBus. Ну и остановить он тоже, разумеется, может:

Код: Выделить всё

dbus-send --system --type=method_call --dest=org.freedesktop.systemd1 /org/freedesktop/systemd1 org.freedesktop.systemd1.Manager.StopUnit string:"YOURSERVICE.service" string:"fail"
"В мире есть случайность, есть предопределенность и есть то, что ты планируешь совершить."
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: d-bus: service management

Сообщение serzh-z »

IMB писал(а):
07.12.2018 11:49
D-Bus поддерживает запуск программ/демонов через service-файл, но что-то я не могу найти как их можно остановить.
Если речь идёт про сервисы D-Bus, то они запускаются (активируются) автоматически ядром D-Bus, когда по шине приходит сообщение для конкретного сервиса. Запускать и останавливать их вручную не нужно, но можно запретить автоматическую активацию и отключить.

Если речь про сервисы systemd, то ими можно управлять через D-Bus-интерфейс org.freedesktop.systemd1.Manager предоставляемый systemd, как написали выше.

Вместо клиента dbus-send из libdbus можно использовать более удобный busctl из sd-bus (часть systemd).
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: d-bus: service management

Сообщение IMB »

Насколько мне извесно D-Bus с озвученным функционалом появился несколько раньше systemd, да и текущие системы не использующие systemd используют D-Bus.

Давайте рассмотрим вырожденный случай - wpa-supplicant, при желении подключиться через wireless интерфейс я дожен его запустить и это легко делается как сриптом, так и через D-Bus, так как он содержит соответствующий service-файл, но если я хочу вернуться обратно на wired интерфейс по-хорошему я должен выключить wpa-supplicant и пока я вижу возможность сделать это только вручную/скрипт.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 21279
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: d-bus: service management

Сообщение Bizdelnick »

IMB писал(а):
07.12.2018 14:55
он содержит соответствующий service-файл
Покажите этот файл, чтобы было понятно, о чём речь.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: d-bus: service management

Сообщение IMB »

Код: Выделить всё

$ cat /etc/debian_version
buster/sid

$ cat /usr/share/dbus-1/system-services/fi.w1.wpa_supplicant1.service 
[D-BUS Service]
Name=fi.w1.wpa_supplicant1
Exec=/sbin/wpa_supplicant -u -s -O /run/wpa_supplicant
User=root
SystemdService=wpa_supplicant.service
Спасибо сказали:
Аватара пользователя
s.xbatob
Сообщения: 1139
ОС: Fedora

Re: d-bus: service management

Сообщение s.xbatob »

IMB
Насколько я помню, директива SystemdService означает, что dbus сам ничего не запускает, а делегирует это systemd. Соответственно, значение директивы Exec игнорируется, но она зачем-то все равно нужна.
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: d-bus: service management

Сообщение serzh-z »

s.xbatob писал:
07.12.2018 16:58
Соответственно, значение директивы Exec игнорируется, но она зачем-то все равно нужна.
Это нужно на случай, если активация сервиса через systemd не сработала (нет systemd или он не смог по какой-то причине запустить сервис). Т.е. отключение SystemdService в systemd не отключит сервис D-Bus, так как в этом случае он все равно будет запущен самим D-Bus через Exec.

По-моему, штатного способа отключения сервисов D-Bus так и не сделали, хотя подобные фич-реквесты были. Ну если только удалить пакет, устанавливающий desktop-файл в /usr/share/dbus-1/system-services.
Спасибо сказали:
IMB
Сообщения: 2567
ОС: Debian

Re: d-bus: service management

Сообщение IMB »

по спецификации активация сервисов D-Bus-м не привязана к systemd или другой системе
Спасибо сказали:
Аватара пользователя
serzh-z
Бывший модератор
Сообщения: 8259
Статус: Маньяк
ОС: Arch, Fedora, Ubuntu

Re: d-bus: service management

Сообщение serzh-z »

IMB
Тут целых два поста написано про то, что SystemdService - это лишь один из двух способов активации сервисов D-Bus, что ваша ссылка лишь подтверждает.
systemd Activation
Service description files may contain a SystemdService key. Its value is the name of a systemd service, for example dbus-com.example.MyDaemon.service.

If this key is present, the bus daemon may carry out activation for this D-Bus service by sending a request to systemd asking it to start the systemd service whose name is the value of SystemdService. For example, the reference dbus-daemon has a --systemd-activation option that enables this feature, and that option is given when it is started by systemd.

On the well-known system bus, it is a common practice to set SystemdService to dbus-, followed by the well-known bus name, followed by .service, then register that name as an alias for the real systemd service. This allows D-Bus activation of a service to be enabled or disabled independently of whether the service is started by systemd during boot.
Спасибо сказали: