두 곳이 아닌 한 곳에서 환경 변수를 정의하는 방법이 있습니까?

두 곳이 아닌 한 곳에서 환경 변수를 정의하는 방법이 있습니까?

우분투 18.04를 사용하고 있습니다. 시스템 전체(셸을 통해)와 Apache-Python 애플리케이션 내에서 액세스할 수 있는 일부 환경 변수를 한 곳에서 정의하고 싶습니다. /etc/profile에서 내가 정의한

export MY_ENV_VAR1=envvar1
export MY_ENV_VAR2=myvalue1
...

그런 다음 /lib/systemd/system/apache2.service가 있습니다.

[Unit]
Description=The Apache HTTP Server
After=network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
Environment=APACHE_STARTED_BY_SYSTEMD=true
Environment=MY_ENV_VAR1=envvar1
Environment=MY_ENV_VAR2=value1
...

Apache 구성 파일(/etc/apache2/sites-available/000-default-le-ssl.conf)에서 다음을 수행할 수 있도록 이러한 환경 변수를 설정했습니다.

    PassEnv MY_ENV_VAR1
    PassEnv DB_USER

이러한 변수를 한 곳에서 정의한 다음 한 파일에서 다른 파일로 참조할 수 있는 방법이 있습니까?

답변1

한 가지 가능성은 /etc/environment변수를 다음 형식으로 파일에 넣는 것입니다.

MY_ENV_VAR1=envvar1
MY_ENV_VAR99="value with spaces"

이는 pam_env로그인 시 읽고 내보내집니다. 아파치가 동일한 파일을 읽도록 하려면 다음을 사용하십시오.

EnvironmentFile=/etc/environment

유닛 파일에 시스템 디자이너는 이 키워드를 사용하는 것을 좋아하지 않으므로 언젠가는 더 이상 사용되지 않고 제거될 수도 있지만 실용주의를 위해 현재는 작동합니다. pam과 systemd는 특수 문자를 같은 방식으로 구문 분석하지 않으므로 변수에 특수 문자를 사용할 때 주의하세요.

관련 정보