如何指定包含=?的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:
one
,two
,two
和two 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
,,第二次也有争论
one
,two 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