如何在网络开始之前启动 systemd 服务?

Udo*_*o G 12 systemd

我正在尝试设置一个新服务(在 Debian Jessie 下),它需要设置一些存储网络配置的安装,因此该服务必须在 network.service 启动之前完成

我尝试了以下方法:

[Unit]
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
#Before=network-pre.target
Before=networking.service

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=networking.service
Run Code Online (Sandbox Code Playgroud)

使用systemd-analyze plot我可以看到我的服务启动,但networking.service启动大约提前 3 秒:

在此处输入图片说明

显然我的配置是错误的,但我很难找到问题......非常感谢任何帮助......

更新

我目前通过将服务配置更改为之前启动local-fs.target而不是networking.service

[Unit]
DefaultDependencies=no
Description=mount/repair remaining filesystems (all persistent fs beyond "/")
Before=local-fs.target

[Service]
Type=oneshot
ExecStart=/opt/intermodul-mounts/start.sh
TimeoutSec=0
RemainAfterExit=yes

[Install]
RequiredBy=local-fs.target
Run Code Online (Sandbox Code Playgroud)

不过,我想了解为什么我的第一个配置没有按预期工作......?

Edw*_*lds 10

network-pre.target 是一个目标,可用于在配置任何网络接口之前订购服务。它的主要目的是与希望在任何网络接口启动之前建立防火墙的防火墙服务一起使用。它是一个被动单元:你不能直接启动它,它不是被网络管理服务拉进来的,而是被想在它之前运行的服务拉进来的。

network-pre.target如果你想在网络启动之前设置一些东西,你想使用

希望在配置网络之前运行的服务应放置 Before=network-pre.target 并设置 Wants=network-pre.target 以将其拉入。

你应该把这些放在下面的[Unit]部分:

Before=network-pre.target
Wants=network-pre.target
Run Code Online (Sandbox Code Playgroud)

参考

  • 谢谢。我最终做了`Before=network-pre.target`和`Wants=network-pre.target`,而对于`[Install]`,我们做了`WantedBy=network.target`。最后一部分强制它是网络所必需的,前者将其整理好。虽然很痛苦 (2认同)