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

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

 Environment=CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current 

并得到错误

 [/lib/systemd/system/archiva.service:10] Invalid environment assignment, ignoring: CATALINA_OPTS=-Dappserver.home\=/var/lib/archiva/apache 

journalctl -xe 。 我试着引用"'来逃避=\而没有成功。这似乎没有记载。

我认为你的问题是由于环境变量内容中的空间。 查看systemd文档中的示例,赋值应该是单个字符串:

例:

 Environment="ONE=one" 'TWO=two two' ExecStart=/bin/echo $ONE $TWO ${TWO} 

这将使用四个参数执行/ bin / echo: onetwotwotwo two

例:

 Environment=ONE='one' "TWO='two two' too" THREE= ExecStart=/bin/echo ${ONE} ${TWO} ${THREE} ExecStart=/bin/echo $ONE $TWO $THREE 

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

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

 [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 

并在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 

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

 EnvironmentFile=/tmp/foo 

包含/tmp/foo (注意缺少引号):

 CATALINA_OPTS=-Dappserver.home=/var/lib/archiva/apache-tomcat-current -Dappserver.base=/var/lib/archiva/apache-tomcat-current