如何指定包含 = 的 Environment systemd 指令?

Kar*_*ter 22 environment-variables systemd

我想指定一个Environment systemd包含的指令=,例如

Environment=CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current
Run Code Online (Sandbox Code Playgroud)

并得到错误

[/lib/systemd/system/archiva.service:10] Invalid environment assignment, ignoring: CATALINA_OPTS=-Dappserver.home\=/var/lib/archiva/apache
Run Code Online (Sandbox Code Playgroud)

journalctl -xe。我试图用报价"'和逃跑=\都没有成功。这似乎没有记录。

mur*_*uru 44

我认为您的问题是由于环境变量内容中的空间造成的。查看systemd docs中的示例,分配应该是单个字符串:

例子:

Environment="ONE=one" 'TWO=two two'
ExecStart=/bin/echo $ONE $TWO ${TWO}
Run Code Online (Sandbox Code Playgroud)

这将执行/斌/回声四个参数:onetwotwo,和two two

例子:

Environment=ONE='one' "TWO='two two' too" THREE=
ExecStart=/bin/echo ${ONE} ${TWO} ${THREE}
ExecStart=/bin/echo $ONE $TWO $THREE
Run Code Online (Sandbox Code Playgroud)

这导致 echo 被调用两次,第一次使用参数 'one', 'two two' too, ,第二次使用参数 one, two two, too

我使用以下服务对此进行了测试(注意整个作业周围的引号):

[Unit]
Description=My Daemon

[Service]
Environment='CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current'
ExecStart=/bin/echo ${CATALINA_OPTS}

[Install]
WantedBy=multi-user.target
Run Code Online (Sandbox Code Playgroud)

并获得了所需的输出journalctl

Apr 26 08:19:29 laptop echo[28439]: -Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current
Run Code Online (Sandbox Code Playgroud)

当然,使用它会更简单EnvironmentFile。将 替换为Environment以下给出了相同的预期结果:

EnvironmentFile=/tmp/foo
Run Code Online (Sandbox Code Playgroud)

其中/tmp/foo包含(注意没有引号):

CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current
Run Code Online (Sandbox Code Playgroud)

  • @Davos 一个合理的地方是`/etc/default`。那里的文件历史上用于为相应的 init 脚本放置环境变量。 (2认同)