环境文件中的systemd,multiline变量,其中新行很重要

all*_*mon 8 systemd

我在debian jessie上使用systemd来控制我正在通过EnvironmentFile=/etc/default/myservice文件提供环境变量的服务

在这个文件中我有一个变量,它是一个公钥

  JWT_PUB_KEY="-----BEGIN FOO BAR KEY-----
  MIIBgjAcBgoqhkiG9w0BDAEDMA4ECKZesfWLQOiDAgID6ASCAWBu7izm8N4V
  2puRO/Mdt+Y8ceywxiC0cE57nrbmvaTSvBwTg9b/xyd8YC6QK7lrhC9Njgp/
  ...
  -----END FOO BAR KEY-----"
Run Code Online (Sandbox Code Playgroud)

把它放在那个不喜欢systemd报告错误(尽管source在同一文件的bash中正常工作)

systemd报告的文档,你可以通过结束每个文件,\但它连接每一行,使多行变量,所以我的程序接收整行在一行,这不再是一个有效的公钥

有没有已知的方法来保留行尾?没有诉诸黑客就像\n在我的应用程序代码中把它们"解释"一样?

Val*_*ity 0

正如您所怀疑的,Systemd 接受\n内部环境变量定义。您不需要执行特殊的解析,只需\n在需要的地方添加适当的 s 并转义实际的换行符即可。Systemd 应该处理其余的部分并将它们转换为换行文字。在你的情况下,这看起来像这样:

JWT_PUB_KEY="-----BEGIN FOO BAR KEY-----\n\
MIIBgjAcBgoqhkiG9w0BDAEDMA4ECKZesfWLQOiDAgID6ASCAWBu7izm8N4V\n\
2puRO/Mdt+Y8ceywxiC0cE57nrbmvaTSvBwTg9b/xyd8YC6QK7lrhC9Njgp/\n\
...\n\
-----END FOO BAR KEY-----"
Run Code Online (Sandbox Code Playgroud)

  • @allan.simon 如果它不起作用,你为什么接受这个答案? (3认同)