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中的示例,分配应该是单个字符串:
例子:
Run Code Online (Sandbox Code Playgroud)Environment="ONE=one" 'TWO=two two' ExecStart=/bin/echo $ONE $TWO ${TWO}这将执行/斌/回声四个参数:
one,two,two,和two two。例子:
Run Code Online (Sandbox Code Playgroud)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,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)