如何定义d-bus激活的systemd服务?

时间:2015-07-29 13:51:26

标签: dbus systemd

有没有人有一个示例或链接到如何定义由d-bus激活的systemd .service的示例?

我的理解是,如果我在这里创建一个test.service文件:

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

具有以下内容:

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

现在可以通过对systemd.Manager的d-bus调用来启动/停止服务吗?如果是这样,怎么样?

2 个答案:

答案 0 :(得分:12)

让我们来看看systemd,hostnamed附带的一个服务。

# 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

神奇的是SystemdService=指令。使用SystemdService=指定的服务是dbus-daemon要求systemd激活的服务。

我们期待在systemd服务目录中使用名为dbus-org.freedesktop.hostname1.service的服务。

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

你去了,这样一种dbus服务org.freedesktop.hostname1.service告诉systemd激活系统服务systemd-hostnamed.service

systemd服务看起来像

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

systemd服务文件的魔力是BusName=指令。该指令告诉systemd在继续之前等到给定的总线名称出现在总线上。

注意:dbus服务的语法与systemd服务完全不同。你需要两者都能有一个dbus激活的守护进程。

答案 1 :(得分:2)

扩展Umut的答案:

systemd的服务定义文件中的内容是:

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

这可确保在启用服务时安装/usr/lib/systemd/system/dbus-org.freedesktop.hostname1.service符号链接。

dbus服务定义指向dbus-org.freedesktop.hostname1.service而不是systemd-hostnamed.service的原因纯粹是为了方便起见。这样很明显,主机名服务是dbus激活的。您可以直接指向实际服务,并跳过符号链接和[Install]部分

中的行