我知道*.service
单位支持Environment=key=val
和EnvironmentFile=fname
条目,但文件似乎*.network
不支持。
Address
是否有其他方法可以从不同的文件或环境变量中获取具体的值?
例如结果会是这样的:
# /etc/some/conf
192.0.2.3
# some.network
[Match]
Name=some
[Network]
# (! invalid !) example of desired effect
Address=$(cat /etc/some/conf)
答案1
Systemd-networkd 不支持从外部文件加载数据(至少在 2020 年 2 月使用 systemd 244 之前),因此您能做的最好的事情就是编写一个以.service
任何方式同步密钥的文件,并添加RequiredBy=systemd-networkd.service
和Before=systemd-networkd.service
以确保它执行在正确的时间工作。
答案2
这些文件是从位于系统网络目录、 易失性运行时网络目录 和本地管理网络目录中
.network
的文件中读取的。所有配置文件都按词法顺序集中排序和处理,无论它们所在的目录如何。但是,具有相同文件名的文件会相互替换。中的文件具有最高优先级,中的文件优先于 中的同名文件。如果需要,这可用于使用本地文件覆盖系统提供的配置文件。作为一种特殊情况,空文件(文件大小为 0)或具有相同名称的符号链接指向完全禁用配置文件(它被“屏蔽”)。/usr/lib/systemd/network
/usr/local/lib/systemd/network
/run/systemd/network
/etc/systemd/network
/etc
/run
/usr
/dev/null
[...]
“
[Address]
”部分接受以下键。指定多个“[Address]
”部分来配置多个地址。