bashrc
upstart 스크립트에서 변수를 로드하고 실행하는 방법( 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 -i
ssh
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
. 이는 터미널을 열 때와 동일한 동작입니다.