우리는 CentOS 6을 사용하여 SGE 클러스터를 설정하고 있습니다. 시스템 관리자가 RPM을 통해(예: make install과 같은 다른 수단을 통해) 설치되지 않은 응용 프로그램을 설치하는 경우 비표준 디렉터리에 있어야 합니다. 이 경우에는 /share/apps/install/bin/
. 이에 대한 경로는 현재 /share/apps/etc/environment.sh
에 의해 호출되는 대부분의 세션(login, qlogin 등)에 추가됩니다 /etc/bashrc
. environment.sh
또한 PERL5LIB에 몇 가지 내용을 추가합니다.
내가 겪고 있는 문제는 /share/apps/install/bin
crontab에서 호출되는 것과 같은 일부 인스턴스에 추가되지 않는다는 것입니다.
나는 PATH=/bin:/usr/bin:/blah/blah:...
내 개인 crontab 내에서 또는 특정 스크립트나 crontab 항목 내에서 수동 및 명시적으로 설정할 수 있다는 것을 알고 있지만, 내가 바라는 것은 외부 어딘가에 비표준 디렉토리를 모든 사용자의 모든 PATH에 넣는 설정이 있다는 /etc/profile
것 /etc/bashrc
입니다 .../bin
. .
답변1
PATH
에 원하는 값이 포함된 파일을 추가합니다 /etc/profile.d
. 이러한 파일은 Bash, Csh Zsh 또는 tcsh와 같은 셸에서 제공되도록 설정됩니다.
예
PATH에 다음 값을 추가해야 했습니다.
/usr/local/share/bin
/etc/profile.d/ourstuff.sh
그래서 우리는 다음 줄이 포함된 파일을 만들었습니다 .
export PATH=/usr/local/share/bin:$PATH
확장자를 가진 파일은 .sh
Bash 및 Zsh와 같은 셸에서 제공됩니다. 확장자를 가진 파일은 .csh
Csh 및 tcsh에서 제공됩니다.
편집 #1 - 후속 조치
OP는 다음과 같은 후속 질문을 했습니다.
예, 하지만 크론 작업은 어떻습니까? 거기에서도 경로를 얻을 수 있는 방법이 있나요? cron이 /etc/profile 또는 /etc/bashrc를 호출하지 않는 것 같습니다.
나는 이에 대해 다음과 같이 응답했습니다.
그렇지도 않고 그렇지도 않을 것입니다. SHELL=/bin/bash
기본 셸(일반적으로 )을 재정의하려면 cron에서 설정해야 합니다 /bin/sh
. 또한 사용자 크론에 대해 BASH_ENV="$HOME/.bashrc"를 설정하고 시스템 크론에 대해 BASH_ENV="/root/.bashrc"
. 이 문제를 해결하는 방법이 될 것입니다.
나는 이것을하지 말 것을 강력히 제안합니다. 특정 환경이 필요한 스크립트가 스스로 설정하도록 하세요. 모든 문제를 글로벌 수준에서 해결하려고 하지 마세요!
답변2
환경 변수 정의를 넣을 수 있습니다 /etc/environment
(시스템이 로드된다고 가정).pam_env
이는 모든 최신 비임베디드 Linux 시스템의 기본값이어야 함).
VARIABLE=VALUE
또는 형식의 정적 환경 변수 정의는 VARIABLE="VALUE"
한 줄에 하나씩만 입력할 수 있습니다. 임의의 셸 명령을 사용할 수 없으며, ( 값에 FOO=hello+$BAR
리터럴을 넣는 ) 쓰기 등을 통해 다른 변수의 값을 참조할 수 없습니다. 와 같은 간단한 할당을 고수하는 한 괜찮을 것입니다. (여기에서는 사용자의 홈 디렉터리를 사용할 수 없습니다. 값은 모든 사용자에 대해 동일해야 합니다.)$
FOO
PATH=/usr/local/bin:/usr/bin:/bin:/share/apps/install/bin
답변3
결국 우리가 한 일은 경로 문제를 피하기 위한 다각적인 솔루션이었습니다. 사용 사례에 따라 다음 중 하나 이상을 사용했습니다.
- 바이너리가 경로에 있을 것으로 예상하는 대신 비표준 위치에 설치된 바이너리에 대한 절대 경로를 사용했습니다. 이는 비표준 외부 종속성이 거의 없거나 독립적으로 작동하는 도구에 사용되었습니다.
- 필요에 따라 환경을 설정하는 도구에 대한 래퍼 스크립트를 생성하고 사용했습니다.
PATH=...
해당 스크립트 내에서 수동으로 설정하거나source $HOME/.bashrc
적절하게 실행합니다. 이는 다른 도구가 필요하지만 클러스터에서 실행할 수 있는 도구에 사용되었습니다. - 바이너리와 더 복잡한 설정을 포함하는 컨테이너(우리의 경우 Docker)를 만들었습니다. 이는 표준 클러스터 설정과 크게 다른 환경이 필요한 도구에 사용되었습니다.