=を含む環境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。私は引用しようとした"'して脱出すること=\、成功せず。これは文書化されていないようです。

回答:


40

あなたの問題は環境変数の内容のスペースによるものだと思います。systemd docsの例を見ると、割り当ては単一の文字列である必要があります。

例:

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

これは、/ binに/ 4引数でエコーを実行します: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、および引数で2回目 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

もちろん、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

引用符を引用する場合(たとえば、Apache 7.0.61の環境で使用CATALINA_OPTSする場合)、実際に使用する方法があります。ありがとう!systemdtomcatEnvironmentFile
カールリヒター

UbuntuでEnvironmentFileを保持するための標準/コンベンションディレクトリとは何ですか?他のシステムでは/ etc / sysconfig /を見ました
ダボス

1
@Davosは妥当な場所/etc/defaultです。そこにあるファイルは、対応するinitスクリプトの環境変数を配置するために歴史的に使用されています。
ムル

PATH変数を含むシステム/ etc / environmentにこのファイルが既にありますが、それに追加するのは賢明でしょうか?
ダボス

1
システム全体の@Davos。実際にすべてのプロセスに設定されている変数に問題がない場合は、確認してください。/etc/environmentはシェルによって処理されないことに注意してください。単純な変数の割り当ては別として、その構文は上記のsystemd構文または一般的なシェル構文とは大きく異なります。
ムル
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.