有什么方法可以配置 systemd 服务(例如 serviceX)以等待 connmand 服务在 serviceX 运行之前完成配置网络接口?根据我对 systemd 的理解,使用或依赖 network.target 是毫无意义的,因为该功能被严重破坏了。我正在使用的系统(BeagleBone Black with Angstrom Linux)使用 connman 而不是 NetworkManager。
3 回答
根据 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.target
。After=syslog.target
与当前的 systemd 版本是冗余的。但最好全面实施network-online.target
。
Wants=network.target network-online.target
在撰写本文时,After=network.target network-online.target
BeagleBone Black 上的 Angstrom 似乎还不够。我还必须添加connman.service
以Wants=
使一切正常工作。
按照此处的说明,我发现此行(在 .service 文件的 [Unit] 部分中)对我有用:
Wants=network-online.target #wait for network up. Can slow down script.
我出于描述的目的应用了此修复程序,以使其opkg upgrade
正常工作,现在它可以正常工作。我认为使用network-online
而不是network
可能是诀窍。