【问题标题】:How can we launch a process through systemd on method_call on some session dbus我们如何在某些会话 dbus 上的 method_call 上通过 systemd 启动进程
【发布时间】:2016-01-29 12:03:46
【问题描述】:

我有一个代理服务 (org.bluez.map_agent)

[D-BUS Service]
Name=org.bluez.map_agent
Exec=echo "Hello"
SystemdService=bluetooth-map-agent.service

bluetooth-map-agent.service的内容

[Unit]
Description=launch MAP agent.

[Service]
User=app
ExecStart=/usr/bin/map-agent
ExecStop=/usr/bin/killall map-agent
KillMode=process

[Install]
WantedBy=multi-user.target

但是当dbus 调用发生时,我的地图代理没有启动,可能是什么原因?

【问题讨论】:

    标签: dbus systemd


    【解决方案1】:

    当 dbus 创建所需的总线时,让您的服务由 systemd 自己启动。这可以使用以下服务文件来实现:

    [Unit] 
    Description=launch MAP agent.
    
    [Service]
    Type=dbus
    User=app
    BusName=org.bluez.map_agent
    ExecStart=/usr/bin/map-agent
    ExecStop=/usr/bin/killall map-agent
    KillMode=process
    
    [Install]
    WantedBy=multi-user.target
    

    并使用systemctl enable xyz.service启用您的服务文件

    Systemd 将等待总线名称在 dbus 上获取,然后才会激活服务。

    【讨论】:

    • org.bluez.map_agent 应该在会话总线上(即安装服务文件时的用户文件夹),据我所知 systemctl enable xyz.service 要求服务文件应该是系统服务的一部分。如有错误请指正
    猜你喜欢
    • 2017-06-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-15
    • 2011-01-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多