systemd、EnvironmentFile、変数の再利用 - どのように?

systemd、EnvironmentFile、変数の再利用 - どのように?

私は次から移住しています。突然現れる到着システム。変換に問題があります。環境ファイル指示する。私はこれを得ることができません環境ファイル働く:

########################################################
# Catalina Settings
CLUSTER_BASE=/d01/tomcat/prod/xyz
CATALINA_BASE=$CLUSTER_BASE/1
CATALINA_TMPDIR=$CATALINA_BASE/temp
CATALINA_HOME=/usr/share/tomcat7
CATALINA_PID=/run/tomcat/tc-prod-xyz-1.pid

########################################################
# Java Settings
JAVA_HOME=/usr/lib/jvm/default-java/jre
JAVA_OPTS=-Djava.awt.headless=true
JAVA_OPTS=$JAVA_OPTS -server
JAVA_OPTS=$JAVA_OPTS -Xms2048m
JAVA_OPTS=$JAVA_OPTS -Xmx2048m
JAVA_OPTS=$JAVA_OPTS -XX:MaxPermSize=2048m
JAVA_OPTS=$JAVA_OPTS -XX:+UseParallelGC
JAVA_OPTS=$JAVA_OPTS -XX:+AggressiveHeap
JAVA_OPTS=$JAVA_OPTS -javaagent:$CLUSTER_BASE/newrelic/newrelic.jar

このタイプのステートメントで変数を再利用するようです。

JAVA_OPTS=$JAVA_OPTS -XX:+UseParallelGC

サポートしていないシステムまるで突然現れる。するシステムあなたはこのようなことを支持していますか、それとも私が長くて読みにくい声明をするべきですか?

ベストアンサー1

残念ながら、あなたが持っているファイルは実際にはシェルスクリプトです。以前は、ほとんどのinitシステム/スクリプトがシェルを使用して環境変数を提供するファイルを解釈していたため、そのファイルでシェル操作を実行できました。ただし、Systemdはこれを行いません。環境ファイルは実際にはスクリプトではなく環境ファイルです。この内容は次のように記録されます。systemd.execマニュアルページ:

文字列内では変数拡張は行われませんが、指定子拡張は可能です。 $文字には特別な意味はありません。

したがって、2つのオプションがあります。

  1. すべての変数を手動で拡張します。を使うという意味ですCATALINA_BASE=/d01/tomcat/prod/xyz/1

  2. シェルを使用してファイルを評価します。
    ExecStart=/bin/bash -ac '. /path/to/env_file; exec /path/to/program'

おすすめ記事