cron에서도 모든 사용자의 경로를 전역적으로 변경합니다.

cron에서도 모든 사용자의 경로를 전역적으로 변경합니다.

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/bincrontab에서 호출되는 것과 같은 특정 인스턴스에 추가되지 않는다는 것입니다.

내 개인 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

확장명이 있는 파일은 .shBash 및 Zsh와 같은 셸에서 검색됩니다. 확장자를 가진 파일은 .cshCsh 및 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)가 생성됩니다. 이는 표준 클러스터 설정과 크게 다른 환경이 필요한 도구에 사용됩니다.

관련 정보