首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何定义d-bus激活的systemd服务?

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

Stack Overflow用户
提问于 2015-07-29 21:51:26
回答 2查看 14.8K关注 0票数 17

有没有人有一个例子,或者链接到如何定义由d- .service激活的systemd总线的例子?

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

代码语言:javascript
复制
/usr/share/dbus-1/services/test.service

内容如下:

代码语言:javascript
复制
[D-BUS Service]
Name=org.me.test
Exec="/tmp/testamundo.sh"

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-30 21:26:25

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

代码语言:javascript
复制
# 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的服务。

代码语言:javascript
复制
# readlink /usr/lib/systemd/system/dbus-org.freedesktop.hostname1.service
systemd-hostnamed.service

这样,dbus服务org.freedesktop.hostname1.service就会告诉systemd激活一个systemd服务systemd-hostnamed.service

并且systemd服务如下所示

代码语言:javascript
复制
# cat /usr/lib/systemd/system/systemd-hostnamed.service
...
...
[Service]
BusName=org.freedesktop.hostname1
...
...

systemd服务文件的神奇之处在于BusName=指令。该指令告诉systemd等待给定的总线名称出现在总线上,然后再继续。

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

票数 19
EN

Stack Overflow用户

发布于 2015-09-03 19:33:59

为了推广Umut的答案:

systemd的服务定义文件中还有:

代码语言:javascript
复制
# 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]部分中的行

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31702465

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档