3

有什么方法可以配置 systemd 服务(例如 serviceX)以等待 connmand 服务在 serviceX 运行之前完成配置网络接口?根据我对 systemd 的理解,使用或依赖 network.target 是毫无意义的,因为该功能被严重破坏了。我正在使用的系统(BeagleBone Black with Angstrom Linux)使用 connman 而不是 NetworkManager。

4

3 回答 3

4

根据 systemd 文档,所有需要在启动时等待工作在线连接的 systemd 单元需要包括以下内容:

[Unit]
...
Wants=network-online.target
After=network-online.target

如果您想与旧的 systemd 版本兼容,您还可以使用:

[Unit]
...
Wants=network.target network-online.target
After=network.target network-online.target

那是针对systemd的。使用 NetworkManager(为了完整起见,我知道您没有使用它),因为上游版本 0.9.10 和包括 Fedora 在内的一些发行版也适用于较旧的上游版本,所以它可以工作。

https://bugzilla.gnome.org/show_bug.cgi?id=728965

当您改用 connman 时,您需要检查 connman 是否network-online.target正确实现。检查 connman 1.30 源代码根本没有出现network-online.target,所以我必须假设 connman 落后了。您可能希望在 connman 和/或您的 linux 发行版中启动功能请求。在这种情况下,如果您在此处添加有关它的注释会很好。

基本上,对于较新的 systemd 版本、正确实现 network-online.target 的网络服务以及使用正确依赖项的服务,一切都应该为用户开箱即用。

根据对另一个答案的评论,单元部分的connman.service外观如下:

[Unit]
Description=Connection service
After=syslog.target

至少应该有 at Before=network.targetAfter=syslog.target与当前的 systemd 版本是冗余的。但最好全面实施network-online.target

于 2014-05-07T09:49:03.873 回答
-1

Wants=network.target network-online.target在撰写本文时,After=network.target network-online.targetBeagleBone Black 上的 Angstrom 似乎还不够。我还必须添加connman.serviceWants=使一切正常工作。

于 2014-05-07T14:46:58.260 回答
-2

按照此处的说明,我发现此行(在 .service 文件的 [Unit] 部分中)对我有用:

Wants=network-online.target #wait for network up. Can slow down script.

我出于描述的目的应用了此修复程序,以使其opkg upgrade正常工作,现在它可以正常工作。我认为使用network-online而不是network可能是诀窍。

于 2014-03-06T16:41:17.290 回答