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


20

我想指定一个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。我试图用报价"'和逃跑=\都没有成功。这似乎没有记录。

Answers:


40

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

例:

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

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

例:

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

这导致在回声被调用两次,第一次用参数 'one''two two' too,和第二时间带参数 onetwo twotoo

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

[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

当然,使用它会更简单EnvironmentFileEnvironment将以下内容替换为可获得相同的预期结果:

EnvironmentFile=/tmp/foo

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

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

当涉及到引号时(例如通过CATALINA_OPTSsystemdApache tomcat7.0.61的环境中使用),EnvironmentFile确实可以使用。谢谢!
Karl Richter

在Ubuntu上保留EnvironmentFile的标准/约定目录是什么?在其他系统上,我看到过/ etc / sysconfig /
达沃斯(Davos)

1
@Davos是一个合理的地方/etc/default。历史上,那里的文件已用于为相应的初始化脚本放置环境变量。
muru

我的系统/ etc / environment中已经有此文件,其中包含PATH变量,将其附加在后面会很明智吗?
达沃斯

1
@Davos在系统范围内。如果几乎为每个过程设置的变量都没有问题,那么可以肯定。注意,/etc/environment它不是由shell处理的;除了简单的变量赋值外,它的语法与上面提到的systemd语法或常规Shell语法有很大的不同。
muru
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.