두 개의 서비스가 있다고 가정해 보겠습니다. 이는 시스템(Ubuntu 16.04.3)이 시작될 때 자동으로 시작되는 두 개의 프로세스입니다.
서비스 문서:
[Unit]
Description=service 1
Requires=init_mdc.service
After=rc.local.service init_mdc.service
[Service]
ExecStart=someCmd
ExecReload=someCmd
KillMode=process
Restart=on-failure
Type=simple
다른 서비스 파일:
[Unit]
Description=service 2
Requires=init_mdc.service
After=rc.local.service init_mdc.service
[Service]
ExecStart=someCmd2
ExecReload=someCmd2
KillMode=process
Restart=on-failure
Type=simple
두 서비스 모두 동일한 환경 변수 중 일부가 필요합니다.
someCmd
두 서비스에 대한 s는 동일한 env 변수를 설정하는 두 개의 서로 다른 bash 스크립트이기 때문에 현재 내 솔루션은 좋지 않습니다 .
두 서비스가 공유할 수 있도록 어딘가에 일부 환경 변수를 설정할 수 있는지 궁금합니다. 즉, 환경 변수를 두 번이 아닌 한 번만 설정하고 싶습니다.
/etc/profile
에서 이러한 환경 변수를 내보내 려고 했지만 /etc/rc.local
작동하지 않습니다. 이는 시스템이 두 가지 서비스를 먼저 실행한 다음 시스템에서 이를 읽기 /etc/profile
때문 이라고 생각합니다./etc/rc.local
여러 서비스 파일에 대해 일부 환경 변수를 설정할 수 있는 방법이 있습니까? 일부 환경 변수를 가져오기 위해 서비스 파일에서 설정할 수 있다는 것을 알고 있지만 EnvironmentFile=XXX
각 서비스에 대해 여러 번 설정 해야 하기 때문에 이것이 마음에 들지 않습니다 .EnvironmentFile=XXX
답변1
사용하는 EnvironmentFile=
것이 방법입니다.
여러 번 설정해야 한다는 점을 이해하지 못합니다. 이러한 변수가 필요한 각 서비스에서 한 번만 설정해야 합니다.
서비스 1:
[Unit]
Description=service 1
[Service]
ExecStart=someCmd
EnvironmentFile=/path/to/common.env
...
서비스 2:
[Unit]
Description=service 2
[Service]
ExecStart=someCmd2
EnvironmentFile=/path/to/common.env
...
모든 VAR=VALUE
설정을 파일에 저장합니다 /path/to/common.env
.
환경 파일의 구문은 쉘 스크립트의 구문과 호환되므로 자신의 환경에서도 얻을 수 있습니다..bash_profile
# ~/.bash_profile
if [ -f /path/to/common.env ]; then
. /path/to/common.env
fi
대안은 PID 1에서 전역 환경 변수를 사용 systemctl set-environment
하거나 설정하는 것입니다. systemctl import-environment
(문서 참조여기.)
특정 서비스에서 이러한 변수를 내 보내야 할 수도 있지만 PassEnvironment=
이 경우 변수 이름만 나열하면 됩니다.
저는 이것이 최선의 솔루션이라고 생각하지 않습니다. EnvironmentFile=
더 독립적이고 우아하며 귀하의 사용 사례에 적합하다고 생각합니다.