能否在systemd单元文件内部定义并使用变量?
能否在systemd单元文件内部定义并使用变量?
你好呀!很遗憾地告诉你,systemd单元文件本身并不支持直接定义这种供单元指令内部使用的自定义变量——就像你示例里写的那种CONFIG=/etc/some_dir/%i.conf然后用$CONFIG调用的方式,是不符合systemd的规则的。
systemd的变量替换机制仅支持两类变量:一类是它内置的特殊标识符(比如%i表示实例名、%h表示用户家目录、%u表示用户名等);另一类是在Environment或EnvironmentFile中定义的变量,但这类变量只能在Service段的Exec*类指令(比如ExecStart)执行的命令里生效,无法在Unit段的断言、描述等指令中使用。
不过你可以用这些替代方案来实现类似需求:
直接重复使用内置标识符:如果你的变量是基于实例名
%i生成的,直接在需要的指令里写完整路径即可,这是最简洁的方式:[Unit] AssertPathExists=/etc/some_dir/%i.conf # ...其他Unit段配置 [Service] EnvironmentFile=/etc/some_dir/%i.conf # ...其他Service段配置借助单元文件片段(Drop-in Files)统一管理:如果你的路径规则很复杂,不想在主单元文件里重复写,可以创建一个drop-in文件(比如
/etc/systemd/system/your-service@.service.d/path.conf),把路径相关的配置集中在这里,但本质上还是用内置标识符来实现:[Unit] AssertPathExists=/etc/some_dir/%i.conf [Service] EnvironmentFile=/etc/some_dir/%i.conf
这样既能实现你想要的“复用路径规则”的效果,又符合systemd的配置规范~
备注:内容来源于stack exchange,提问作者U. Windl
相关产品推荐
相关产品推荐

