Доброго дня!
D-Bus поддерживает запуск программ/демонов через service-файл, но что-то я не могу найти как их можно остановить.
Неужто только через внешний скрипт или сигнал, D-Bus не предоставляет такого?
Спасибо.
d-bus: service management
Модератор: Bizdelnick
-
- Сообщения: 512
- Статус: самоучка
- ОС: Rosa 2016 Fresh
Re: d-bus: service management
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"
"В мире есть случайность, есть предопределенность и есть то, что ты планируешь совершить."
Спасибо сказали:
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: d-bus: service management
Если речь идёт про сервисы D-Bus, то они запускаются (активируются) автоматически ядром D-Bus, когда по шине приходит сообщение для конкретного сервиса. Запускать и останавливать их вручную не нужно, но можно запретить автоматическую активацию и отключить.
Если речь про сервисы systemd, то ими можно управлять через D-Bus-интерфейс org.freedesktop.systemd1.Manager предоставляемый systemd, как написали выше.
Вместо клиента dbus-send из libdbus можно использовать более удобный busctl из sd-bus (часть systemd).
-
- Сообщения: 2567
- ОС: Debian
Re: d-bus: service management
Насколько мне извесно D-Bus с озвученным функционалом появился несколько раньше systemd, да и текущие системы не использующие systemd используют D-Bus.
Давайте рассмотрим вырожденный случай - wpa-supplicant, при желении подключиться через wireless интерфейс я дожен его запустить и это легко делается как сриптом, так и через D-Bus, так как он содержит соответствующий service-файл, но если я хочу вернуться обратно на wired интерфейс по-хорошему я должен выключить wpa-supplicant и пока я вижу возможность сделать это только вручную/скрипт.
Давайте рассмотрим вырожденный случай - wpa-supplicant, при желении подключиться через wireless интерфейс я дожен его запустить и это легко делается как сриптом, так и через D-Bus, так как он содержит соответствующий service-файл, но если я хочу вернуться обратно на wired интерфейс по-хорошему я должен выключить wpa-supplicant и пока я вижу возможность сделать это только вручную/скрипт.
-
- Модератор
- Сообщения: 21279
- Статус: nulla salus bello
- ОС: Debian GNU/Linux
Re: d-bus: service management
Покажите этот файл, чтобы было понятно, о чём речь.
Пишите правильно:
в консоли вку́пе (с чем-либо) в общем вообще | в течение (часа) новичок нюанс по умолчанию | приемлемо проблема пробовать трафик |
-
- Сообщения: 2567
- ОС: Debian
Re: d-bus: service management
Код: Выделить всё
$ 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
-
- Сообщения: 1139
- ОС: Fedora
Re: d-bus: service management
IMB
Насколько я помню, директива SystemdService означает, что dbus сам ничего не запускает, а делегирует это systemd. Соответственно, значение директивы Exec игнорируется, но она зачем-то все равно нужна.
Насколько я помню, директива SystemdService означает, что dbus сам ничего не запускает, а делегирует это systemd. Соответственно, значение директивы Exec игнорируется, но она зачем-то все равно нужна.
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: d-bus: service management
Это нужно на случай, если активация сервиса через systemd не сработала (нет systemd или он не смог по какой-то причине запустить сервис). Т.е. отключение SystemdService в systemd не отключит сервис D-Bus, так как в этом случае он все равно будет запущен самим D-Bus через Exec.
По-моему, штатного способа отключения сервисов D-Bus так и не сделали, хотя подобные фич-реквесты были. Ну если только удалить пакет, устанавливающий desktop-файл в /usr/share/dbus-1/system-services.
-
- Сообщения: 2567
- ОС: Debian
Re: d-bus: service management
по спецификации активация сервисов D-Bus-м не привязана к systemd или другой системе
-
- Бывший модератор
- Сообщения: 8259
- Статус: Маньяк
- ОС: Arch, Fedora, Ubuntu
Re: d-bus: service management
IMB
Тут целых два поста написано про то, что SystemdService - это лишь один из двух способов активации сервисов D-Bus, что ваша ссылка лишь подтверждает.
Тут целых два поста написано про то, что 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.