나는 다음에서 이주하고 있다갑자기 나타나다도착하다체계. 변환하는 데 문제가 있습니다.환경 파일지시하다. 나는 이것을 얻을 수 없다환경 파일일하다:
########################################################
# 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
매뉴얼 페이지:
문자열 내부에서는 변수 확장이 이루어지지 않지만, 지정자 확장은 가능합니다. $ 문자에는 특별한 의미가 없습니다.
따라서 두 가지 옵션이 있습니다.
모든 변수를 수동으로 확장합니다. 을 사용한다는 뜻입니다
CATALINA_BASE=/d01/tomcat/prod/xyz/1
.셸을 사용하여 파일을 평가합니다.
ExecStart=/bin/bash -ac '. /path/to/env_file; exec /path/to/program'
답변2
길고 읽기 어려운 진술을 작성해야 합니까?
아니요
백슬래시로 끝나는 줄은 다음 줄과 연결되어 여러 줄의 변수 정의가 가능합니다.
답변3
bin/setenv.sh
Tomcat의 특정 경우(이 질문에서와 같이) 대부분의 설정을 시작 시 Tomcat에 의해 실행되고 예상대로 쉘 스크립트의 변수를 평가하는 에 넣는 것이 더 쉽다는 것을 알았습니다 .
그래서 and에 대한 변수를 /etc/systemd/system/tomcat.service
지정 하고 나머지는 넣습니다.Environment
CATALINA_BASE
CATALINA_HOME
${CATALINA_BASE}/bin/setenv.sh
답변4
또 다른 옵션: 이 유닛 전에 도우미 유닛을 실행하고 EnvironmentFile
사용할 수 있는 유닛을 생성하는 것입니다.https://stackoverflow.com/a/42841480/32453
예를 들어 보조 장치는 bash를 사용할 수 있습니다. systemd
env를 import하는 방법 인 것 같습니다 . :|