![systemd-networkd-wait-online.service 始终被更新覆盖](https://linux22.com/image/208285/systemd-networkd-wait-online.service%20%E5%A7%8B%E7%BB%88%E8%A2%AB%E6%9B%B4%E6%96%B0%E8%A6%86%E7%9B%96.png)
拱门 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/
尤其:
- 用于
cat /etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf
查看您的更改; - 编辑
/lib/systemd/system/systemd-networkd-wait-online.service
; - 删除
/etc/systemd/system/systemd-networkd-wait-online.service.d/override.conf
; systemctl daemon-reload
systemctl restart
systemd-networkd 服务。
答案3
我认为您可以创建一个.sh.
运行命令并将其与服务关联的文件。因此,这只是一个补丁,您应该能够将该ExecStart=/usr/lib/systemd/systemd-networkd-wait-online --any
命令放入将在启动时运行的文件中。前几天我正在读这篇文章创建系统服务。您也许可以更改原始文件以满足您的需要,请检查该页面的底部,他们在其中创建/显示创建和安装服务的示例以太网工具。希望有帮助。