systemd ExecStart의 환경 변수, ExecStop 절이 예상대로 작동하지 않습니다.

systemd ExecStart의 환경 변수, ExecStop 절이 예상대로 작동하지 않습니다.

일부 시스템 서비스에 대한 일부 단위 파일을 작업 중입니다. 내 바이너리 중 일부에 대한 경로 접두사는 상당히 길어서 ExecStart=, ExecStartPost= 및 ExecStop= 절에서 여러 번 사용됩니다.

일부 환경 변수가 정의되어 있습니다(서비스에도 전달해야 함). 예:

Environment=ORACLE_HOME=/u01/app/oracle/product/19/db_1

나는 systemd.service(5)의 "명령줄" 섹션에서 Exec*= 절에서 변수 확장을 사용할 수 있어야 한다고 믿습니다. 예:

ExecStart=${ORACLE_HOME}/bin/dbstart

이를 시도하고 systemctl daemon-reload를 수행하면 저널에 다음 오류가 발생합니다.

systemd[1]: [/usr/lib/systemd/system/oracle.service:37] Executable path is not absolute, ignoring: ${ORACLE_HOME}/bin/dbstart /u01/app/oracle/product/19/db_1

systemd 문서는 실행할 파일의 경로가 /로 시작해야 한다는 점을 매우 명확하게 설명하고 있지만(허용된 접두사 제외) 내가 원하는 것을 수행할 수 있도록 하는 구문에 누락된 미묘한 차이가 있습니까?

결국, 시스템 단위 파일과 프로필 설정 등에 사용할 수 있도록 사용되는 환경 변수가 포함된 파일을 갖고 싶습니다.

RHEL7과 RHEL8을 사용하고 있습니다.

답변1

환경 변수를 사용할 수 있지만 명령 이름으로는 사용할 수 없습니다. "명령줄" 섹션systemd.service(5)다음과 같이 말합니다

첫 번째 인수(즉, 실행할 프로그램)는 변수가 될 수 없습니다.

관련 정보