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

时间:2016-03-10 07:11:21

标签: systemd

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

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

  JWT_PUB_KEY="-----BEGIN FOO BAR KEY-----
  MIIBgjAcBgoqhkiG9w0BDAEDMA4ECKZesfWLQOiDAgID6ASCAWBu7izm8N4V
  2puRO/Mdt+Y8ceywxiC0cE57nrbmvaTSvBwTg9b/xyd8YC6QK7lrhC9Njgp/
  ...
  -----END FOO BAR KEY-----"

这样做就不喜欢systemd报告错误(尽管在同一文件的bash中执行source正常工作)

systemd报告的文档,您可以通过使用\结束每个文件来获得多行变量,但是连接每行(因此我的程序会在一行下接收整个文件,不再是一个有效的公钥)

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

2 个答案:

答案 0 :(得分:2)

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

JWT_PUB_KEY="-----BEGIN FOO BAR KEY-----\n\
MIIBgjAcBgoqhkiG9w0BDAEDMA4ECKZesfWLQOiDAgID6ASCAWBu7izm8N4V\n\
2puRO/Mdt+Y8ceywxiC0cE57nrbmvaTSvBwTg9b/xyd8YC6QK7lrhC9Njgp/\n\
...\n\
-----END FOO BAR KEY-----"

答案 1 :(得分:0)

你不应该解释(解析?)你的结尾的换行符,这应该全部自动发生,as explained here,这意味着在每一行的末尾添加'\ n'应该做的伎俩