我有一个用户空间守护进程,称为它maxwell
,它根据来自另一个应用程序的 D-bus 信号执行各种操作,称为它room
。我想maxwell
在用户启动后立即运行,并在退出room
时停止它。room
我认为像这样的启动器脚本会导致所需的行为:
#!/bin/sh
systemctl --user start maxwell
room
systemctl --user stop maxwell
但是有没有更好/标准的方法来做到这一点,例如通过 systemd 本身?
更新:我正在寻找的功能似乎upstart
与它的dbus event提供的功能相似。根据 Stephen Kitt 的回答,最接近的事情systemd
似乎是自动启动一个服务,该服务在第一次使用某个 D-bus 名称时“拥有”该名称;不幸的是,在这种情况下,它room
“拥有”这个名字。
注意:我不认为这和systemd requires="some non-systemd process" 是一样的吗?或者,至少,其中提供的答案在这种情况下有效。据我了解,如果该单元尚未运行,则 usingExecStartPre
只会将该maxwell
单元标记为失败。room