이 질문은 @FrusteratedWithFormsDesigner에서 비롯되었습니다.논평.
export
init.d 스크립트에 설정된 환경 변수를 동일한 init.d 스크립트에서 시작된 다운스트림 프로세스에 사용할 수 있도록 하려면 어떻게 해야 합니까 ?
더 자세히 설명하자면 저는 Amazon EC2 인스턴스를 사용하고 있으며 init.d 스크립트를 사용하여 node
.js 서버를 제어합니다. 이 서버는 nodemon
파일 변경 사항을 관찰 하고 node
필요에 따라 다시 시작하여 제어됩니다. 즉, 내 init.d 스크립트가 시작된 nodemon
다음 시작됩니다 node
. init.d 스크립트에 설정된 환경 변수는 에서는 사용할 수 있지만 에서는 사용할 수 없는 export
것으로 보입니다 . 이러한 환경 변수 도 사용할 수 있게 하려면 어떻게 해야 합니까 ?nodemon
node
node
현재 내 Amazon EC2 인스턴스에서는 init.d만 사용할 수 있는데 init.d 스크립트를 사용하면 이것이 가능합니까? 그렇지 않은 경우 upstart 또는 가급적 systemd를 사용하여 이를 달성할 수 있습니까?
답변1
Fedora 또는 Ubuntu 16.04와 같은 시스템 기반 Linux 배포판으로 전환하는 것이 좋습니다. systemd
환경 변수는 프로세스에 쉽게 전달될 수 있으며 실패한 프로세스를 자동으로 다시 시작하고 부팅 시 시작하는 작업을 처리할 수 있습니다. systemd의 로그도 로깅을 매우 잘 처리합니다. systemd는 운영 체제 배포판의 일부이므로 다른 것을 설치하거나 실행하는 데 따른 오버헤드도 없습니다.
다음은 systemd를 사용하여 유닛 파일에 두 개의 환경 변수를 설정하는 예입니다.
Environment="ONE=one" 'TWO=two two'
완전한 문서는 다음과 같습니다여기.
초기화 시스템과 프로세스 관리자가 모두 환경 변수 전달을 처리하므로 문제는 부분적으로 복잡합니다. systemd를 초기화 시스템 및 프로세스 관리자로 사용하면 복잡성이 제거됩니다.
답변2
권장되는 대로 systemd 서비스 자체에서 환경 지시어를 사용하는 것 외에도이 답변, 또 다른 옵션은 EnvironmentFile 지시어입니다.
나는 이 분야의 전문가가 아니라는 점에 유의하십시오. (분명히 나는 질문의 작성자입니다.) 나는 단지 최선을 다해 요약하려고 노력하고 있습니다.페도라 위키. 자유롭게 편집/수정해 주세요.
환경 파일 지시어
줄 바꿈으로 구분된 변수 할당이 포함된 파일을 만듭니다.
# myservice.env
ENV1=value1
ENV2=value2
그런 다음 서비스 단위 파일에서 EnvironmentFile 지시문을 사용합니다.
[Service]
...
EnvironmentFile=-/path/to/myservice.env
...
유닛 파일에서 ${ENV1}
및 를 사용하여 $ENV1
그 안에 설정된 변수를 참조하세요.myservice.env.
이 줄의 "-"는 EnvironmentFile=
환경 파일이 존재하지 않는 경우 오류 메시지가 생성되지 않음을 보장합니다.
답변3
AWS EC2와 같은 가상화된 환경에서는 다음을 활용할 수 있습니다./etc/environment
[Service]
...
EnvironmentFile=/etc/environment
...