systemd-networkd-wait-online.service 始终被更新覆盖

systemd-networkd-wait-online.service 始终被更新覆盖

拱门 5.18.12

我有多个网络接口,有时需要几分钟才能连接所有接口。然而,对于系统启动,我只需要一个——哪一个取决于我的地理位置。例子有时我想用wifi,有时又不想。

为了避免长时间启动,我/lib/systemd/system/systemd-networkd-wait-online.service通过添加--any到该ExecStart行来修改 。

 ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any

这很有魅力。

然而,在更新时,该文件被覆盖,因此我需要很长时间的启动,然后我必须再次修改服务文件。

这里有更有效的策略吗?

答案1

结合这两个想法如何覆盖 systemd 单元文件设置?,我建议通过调用覆盖 ExecStart 指令systemctl edit systemd-networkd-wait-online.service,这将打开一个编辑器;将下面的节放入该文件中,然后保存并退出编辑器:

[Service]
ExecStart=
ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any

该命令将在 /etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf 中放置一个包含这些内容的文件。双倍的 ExecStart 指令不是拼写错误;在设置自己的内容之前,首先清除现有内容非常重要。

由于 /lib/systemd/system/systemd-networkd-wait-online.service 文件是由包管理器提供的,因此您肯定会丢失一个更新或另一个更新:

  • 在软件包更新期间,对 /lib 下文件的更改可能会丢失
  • 包管理器对 ExecStart 指令的更改将被您的本地覆盖覆盖。

在我看来,第二种选择是更好的选择,因为:

  • 它位于 /etc 中,不应受到软件包升级的影响(因此您的更改不会完全丢失)
  • 您可以向覆盖文件添加注释,解释您正在做什么以及为什么
  • 如果发生的话,对 ExecStart 的打包更改可以合并(或不合并)到本地覆盖中

如果包决定重命名或以其他方式移动systemd-networkd-wait-online程序,您的覆盖将会中断,直到您更新它(但如果发生这种情况,您对 /lib 中文件的更改也将丢失,因此您的功能无论如何都会丢失)。

答案2

/lib/systemd/system/systemd-networkd-wait-online.service您可以通过运行强制保留手动更改systemctl daemon-reload

警告:在运行 daemon-reload 之前,进行任何更改systemctl edit并将所需的更改添加到文件中非常重要。/lib/systemd/system/尤其:

  1. 用于cat /etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf查看您的更改;
  2. 编辑/lib/systemd/system/systemd-networkd-wait-online.service;
  3. 删除/etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf;
  4. systemctl daemon-reload
  5. systemctl restartsystemd-networkd 服务。

答案3

我认为您可以创建一个.sh.运行命令并将其与服务关联的文件。因此,这只是一个补丁,您应该能够将该ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any命令放入将在启动时运行的文件中。前几天我正在读这篇文章创建系统服务。您也许可以更改原始文件以满足您的需要,请检查该页面的底部,他们在其中创建/显示创建和安装服务的示例以太网工具。希望有帮助。

相关内容