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

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

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

나는 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

확장자를 가진 파일은 .shBash 및 Zsh와 같은 셸에서 제공됩니다. 확장자를 가진 파일은 .cshCsh 및 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리터럴을 넣는 ) 쓰기 등을 통해 다른 변수의 값을 참조할 수 없습니다. 와 같은 간단한 할당을 고수하는 한 괜찮을 것입니다. (여기에서는 사용자의 홈 디렉터리를 사용할 수 없습니다. 값은 모든 사용자에 대해 동일해야 합니다.)$FOOPATH=/usr/local/bin:/usr/bin:/bin:/share/apps/install/bin

답변3

결국 우리가 한 일은 경로 문제를 피하기 위한 다각적인 솔루션이었습니다. 사용 사례에 따라 다음 중 하나 이상을 사용했습니다.

  • 바이너리가 경로에 있을 것으로 예상하는 대신 비표준 위치에 설치된 바이너리에 대한 절대 경로를 사용했습니다. 이는 비표준 외부 종속성이 거의 없거나 독립적으로 작동하는 도구에 사용되었습니다.
  • 필요에 따라 환경을 설정하는 도구에 대한 래퍼 스크립트를 생성하고 사용했습니다. PATH=... 해당 스크립트 내에서 수동으로 설정하거나 source $HOME/.bashrc적절하게 실행합니다. 이는 다른 도구가 필요하지만 클러스터에서 실행할 수 있는 도구에 사용되었습니다.
  • 바이너리와 더 복잡한 설정을 포함하는 컨테이너(우리의 경우 Docker)를 만들었습니다. 이는 표준 클러스터 설정과 크게 다른 환경이 필요한 도구에 사용되었습니다.

관련 정보