【问题标题】:How to write systemd environment variables value which contains =如何编写包含 = 的 systemd 环境变量值
【发布时间】:2017-04-07 13:02:16
【问题描述】:

在 systemd 单元文件中,我有一个内容为 key=IamValue=abc 的环境,如您所见,值为 IamValue=abc,其中包含 =

对于这种情况,如何编写单元文件?

我试过如下,但似乎无效:

[Unit]
Description=...

[Service]
WorkingDirectory=...
ExecStart=...
Restart=always
RestartSec=10                                          
SyslogIdentifier=...
User=root
Environment=key="IamValue=abc"

【问题讨论】:

  • 您可以使用环境文件:fedoraproject.org/wiki/….
  • “但它似乎无效”,您是否尝试转储环境以查看实际情况?引号真的应该在那里吗?
  • @Kay 你是对的,在我删除引号后它正在工作。所以环境解析器只是被第一个=分割了吗?没有找到这样的文件。
  • 对我来说,在第一个等号处拆分一次似乎是最合乎逻辑的实现。您什么时候需要在密钥中使用 =
  • @Kay 在我的情况下,我想为我的 3rd 方服务存储一些密钥,它基本上是随机字符串,所以它可能包含等号。

标签: linux systemd


【解决方案1】:

我在test.service 文件中测试了它是否有效:

[Unit]
Description=Hi

[Service]
Type=oneshot
Environment=key="IamValue=abc"
ExecStart=/bin/bash -c "/bin/echo key:$key"

如果您运行它然后执行journalctl -u test,您可以看到包含等号的键有效。

我提出了一个update to the official systemd docs 来更好地澄清这个案例。

【讨论】:

  • 有趣的是,我昨天刚刚浪费了 2 个小时,因为我写了 Environment=DJANGO_SETTINGS_MODULE="something.settings" 并且 systemd 创建了一个变量 DJANGO_SETTINGS_MODULE,其值为“something.settings”,包括双引号... > ___>
【解决方案2】:

或者使用EnvironmentFile,单元文件中的配置行:

EnvironmentFile=-/etc/sysconfig/test

内容在/etc/sysconfig/test:

key="IamValue=abc"

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-05-15
    • 2021-01-23
    • 2018-11-12
    • 2013-07-08
    • 2023-03-07
    • 1970-01-01
    • 2020-05-08
    • 2021-11-05
    相关资源
    最近更新 更多