Systemd DBus API 对于禁用的服务返回未加载的服务

Systemd DBus API 对于禁用的服务返回未加载的服务

我想从 D-Bus 接口启动 systemd 服务。然而,Systemd D-Bus 接口似乎不知道尚未启动或“启用”(启动时运行)的服务:

# my-service.service
[Unit]
Description=My service

[Service]
Type=simple
ExecStart=/usr/local/bin/my-service

[Install]
WantedBy=multi-user.target
> systemctl status my-service
● my-service.service - My service
     Loaded: loaded (/usr/local/lib/systemd/system/my-service.service; disabled; vendor preset: enabled)
     Active: inactive (dead)

> gdbus call --system --dest org.freedesktop.systemd1 -o /org/freedesktop/systemd1 -m org.freedesktop.systemd1.Manager.GetUnit my-service.service
Erreur : GDBus.Error:org.freedesktop.systemd1.NoSuchUnit: Unit my-service.service not loaded.

> systemctl enable my-service.service
Created symlink /etc/systemd/system/multi-user.target.wants/my-service.service → /usr/local/lib/systemd/system/my-service.service.

> gdbus call --system --dest org.freedesktop.systemd1 -o /org/freedesktop/systemd1 -m org.freedesktop.systemd1.Manager.GetUnit my-service.service
(objectpath '/org/freedesktop/systemd1/unit/my_2dservice_2eservice',)

我可以使用 systemctl 启动 my-service,但无法通过 D-Bus 访问它。如何使用 D-Bus 接口来systemctl启动禁用的服务?

答案1

根据systemd D-Bus 接口文档,有一种方法LoadUnit(name)可以获取单位信息并从磁盘加载它(如果还没有的话)。

此外,该方法似乎StartUnit(name, mode)并未表明它是否加载了该单元,但可以合理猜测它会加载该单元。

相关内容