CentOS 6을 사용하여 SGE 클러스터를 설정하고 있습니다. 내 시스템 관리자는 RPM을 통해(예: make install 등을 통해) 설치되지 않은 애플리케이션을 설치하고 있으며 이러한 애플리케이션은 비표준 디렉토리에 있어야 합니다 /share/apps/install/bin/
. 이 경우 현재 이 경로는 대부분의 세션(login, qlogin 등)에 추가됩니다. .), /share/apps/etc/environment.sh
이 경로를 통해 PERL5LIB에도 일부 내용이 추가됩니다 /etc/bashrc
. environment.sh
내가 겪고 있는 문제는 /share/apps/install/bin
crontab에서 호출되는 것과 같은 특정 인스턴스에 추가되지 않는다는 것입니다.
내 개인 crontab이나 특정 스크립트 또는 crontab 항목에서 수동 및 명시적으로 설정할 수 있다는 것을 알고 있지만 외부 어딘가에 설정을 갖 거나 모든 사용자에 대한 모든 경로에 비표준 디렉토리를 배치하고 PATH=/bin:/usr/bin:/blah/blah:...
싶습니다 ./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
. 사용자 crons(BASH_ENV="$HOME/.bashrc")에 대해 이를 설정하고 시스템 crons에 대해 설정할 수도 있습니다 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)가 생성됩니다. 이는 표준 클러스터 설정과 크게 다른 환경이 필요한 도구에 사용됩니다.