=를 포함하는 환경 시스템 지시문을 지정하는 방법?


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}

실행할이 / 빈은 / 사 개 인수와 함께 에코 : one, two, two,와 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, 및 인수 번째 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

그리고 원하는 출력을 얻었습니다 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

그것은 (사용하여 예를 들어, 인용 지수에 관해서 CATALINA_OPTSsystemd아파치 환경에서 tomcat사용 7.0.61) EnvironmentFile정말 길을 가야하는 것입니다. 감사!
Karl Richter

Ubuntu에 EnvironmentFile을 유지하기위한 표준 / 컨벤션 디렉토리는 무엇입니까? 다른 시스템에서 나는 / etc / sysconfig /를 보았습니다
Davos

1
@Davos는 합리적인 장소가 될 것입니다 /etc/default. 역사적으로 해당 파일은 해당 초기화 스크립트에 환경 변수를 배치하는 데 사용되었습니다.
muru

PATH 변수를 포함하는 시스템 / etc / environment에이 파일이 이미 있습니다.
다 보스

1
@Davos는 시스템 전체입니다. 실제로 모든 프로세스에 대해 변수를 설정하는 데 문제가 없다면 반드시 확인하십시오. 참고 /etc/environment쉘에 의해 처리되지 않는다; 간단한 변수 할당 외에도 구문은 위에서 언급 한 시스템 구문이나 일반적인 쉘 구문과 매우 다릅니다.
muru
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.