Upstart - bashrc 변수 로드

Upstart - bashrc 변수 로드

bashrcupstart 스크립트에서 변수를 로드하고 실행하는 방법( node.js이 경우 서버) 을 알고 싶습니다 .

가장 좋은 접근 방식은 무엇입니까?

나는 이것을 시도했습니다 :

exec sudo -u someuser $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1

exec start-stop-daemon --start -c someuser --exec $NODE_PATH $FULL_PATH/$FILE_NAME >> /var/log/$PROGRAM_NAME.sys.log 2>&1

그러나 첫 번째 옵션에서는 노드 애플리케이션이 http_proxy변수(에 정의됨 /etc/bash.bashrc)를 읽을 수 없습니다. 두 번째에서는 구성 파일을 읽을 수 없습니다(해당 /opt폴더에 노드 애플리케이션이 설치되어 있음).

답변1

/etc/bash.bashrc대화형 쉘이 시작될 때 읽혀집니다. 여기에서 완료 설정, 프롬프트 등과 같은 대화형 사용을 위한 설정이 있습니다. 거기에 환경 변수를 설정하지 마십시오. 바라보다모든 쉘이 읽을 수 있는 ".bashrc"에 해당하는 파일이 있습니까?시스템 전반의 환경 변수를 위한 좋은 장소는 다음과 같습니다./etc/environment/etc/profile(및 의 파일 /etc/profile.d).

정상Upstart의 환경 변수 설정 방법작업 파일 자체에 있습니다. Upstart에서는 읽을 수 없지만 /etc/environment작업 스크립트의 파일에서 환경 변수를 로드할 수 있습니다.

script
. /etc/environment
exec start-stop-daemon …
end script

답변2

호출되고 있다고 생각하도록 속여서 bash읽기를 /etc/bash.bashrc강제 로 수행할 수 있습니다 ~/.bashrc(다른 부작용은 사용되지 않음).bash -issh

sudo -Hu someuser env SSH_CLIENT=1 SHLVL=0 \
  "NODE_PATH=$NODE_PATH" "FULL_PATH=$FULL_PATH" \
  "FILE_NAME=$FILE_NAME" "PROGRAM_NAME=$PROGRAM_NAME" bash -c '
  "$NODE_PATH" "$FULL_PATH/$FILE_NAME" >> "/var/log/$PROGRAM_NAME.sys.log" 2>&1'

sudo일반적으로 환경이 재설정되므로 이렇게 해야 합니다. (적어도 위치에 대해서는) 설정하기를 원합니다 -H(또는 -i구성 -i파일을 읽게 되지만) HOME.~/.bashrc

답변3

bash대화형 셸로 강제 실행할 수 있습니다 . 다음 명령을 시도해 보세요.

sudo -iu someuser /bin/bash -i -c '$NODE_PATH $FULL_PATH/$FILE_NAME \
>> /var/log/$PROGRAM_NAME.sys.log 2>&1'

이제 명령을 실행하기 전에 ~/.bashrc소스 /etc/bash.bashrc는 입니다 bash. 이는 터미널을 열 때와 동일한 동작입니다.

관련 정보