시스템 환경: 변수가 있는지 확인

시스템 환경: 변수가 있는지 확인

Environmentsystemd는 서비스 파일에서 이것을 허용합니까 ?

Environment=abc=${abc:-'notABC?'}

즉, 존재하는 abc것처럼 설정하고 , 그렇지 않은 경우 에는abcabcabcnotABC?

systemd가 이것을 할 수 있습니까?

답변1

아니요, 이는 최소한의 변수 확장만 지원하고 실제로 쉘과 같은 변수 대체를 달성하도록 설계되지 않은 시스템 단위 파일에서는 불가능합니다.

설명하는 것과 유사한 것이 필요한 경우 초기화를 셸 스크립트로 래핑하고 실행 파일에서 해당 스크립트를 사용하는 것이 좋습니다. ExecStart=이 경우 서비스를 실행하기 전에 환경 변수를 설정할 수 있는 셸의 모든 기능을 갖게 됩니다. 메인 프로그램.

내부에서 셸 스크립트를 사용하는 경우 셸이 systemd에서 명령을 직접 모니터링하는 것을 방지하지 않도록 스크립트 끝에서 기본 프로그램을 시작해야 ExecStart=합니다 .exec

추가 외부 파일을 생성하고 유지하지 않으려면 유닛 파일에 셸 스크립트를 인라인할 수 있지만 이 경우 명시적으로 셸을 호출해야 하며( sh -c다른 셸 또는 이에 상응하는 셸을 사용하여) 이스케이프해야 한다는 점을 기억하세요 $. 그 중 두 개를 사용) systemd가 해석을 시도하는 것을 방지합니다. 따라서 다음과 같은 것이 필요합니다.

ExecStart=/bin/sh -c 'abc=$${abc:-"notABC?"}; exec mycmd "$abc"'

관련 정보