我正在尝试定义一个服务启动,它需要将解密密码设置为变量,以及另外几个变量。该加密密码是%c
变量内容的一部分,这导致了一个我似乎无法解决的问题。
如果我在编辑服务定义时执行systemctl daemon-reload
,那么systemctl show | grep Env
我可以看到......
如果我设置
Environment="PASSWORD=blah%ci"
那么我得到Environment=PASSWORD=blah/servicei
如果我设置
Environment="PASSWORD=blah\%ci"
那么我得到Environment=
我也尝试将该变量括在各种不同的引号中,但行为没有任何实际改变。
我正在使用 Ubuntu 20.04。
提前致谢。
在 systemd 单元中,您可以使用以下格式的各种说明符
%<char>
(例如,最常见的是%i
模板单元的实例名称)。查看“说明符”部分man 5 systemd.unit
以获取完整列表。虽然%c
没有列出,但我想它可能没有记录。无论如何,说明符表中的最后一项就是您所需要的:%%
“%%
”代替“%
”来指定单个百分号。因此你需要的是类似这样的内容:
但是,另一种方法是使用
EnvironmentFile
,并将此类特殊环境变量放入该文件中(请参阅我的另一个答案,了解另一个此类环境变量违反 systemd 语法的示例)。这也可能稍微安全一些,因为 systemd 单元通常对每个人都可见,但EnvironmentFile
可以限制为仅 root 可访问。第三个更为复杂的选择是使用凭证,但这也需要修改服务。