zsh와 Bourne Shell 간의 환경 변수 공유(crontab용)

zsh와 Bourne Shell 간의 환경 변수 공유(crontab용)

.zshrc에 JAVA_HOME을 설정했습니다.

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/

이는 대화형 프로그램에 적합합니다. 하지만 Bourne 쉘을 사용하는 cron을 통해 실행되는 JVM 프로그램이 있습니다. Bourne Shell 프로그램은 계속해서 다음을 제공합니다.

groovy: JAVA_HOME is not defined correctly, can not execute: /usr/lib/jvm/default-java/bin/java

이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 이전에는 이 문제에 대해 걱정했던 기억이 없습니다. 현재는 모든 crontab 항목에 JAVA_HOME을 설정했는데 이는 번거롭고 중복됩니다.

답변1

자신의 사용자의 crontab을 참조한다고 가정하면 정의의 중복을 피하기 위해 비대화형, 비로그인 쉘 및 cron 작업(대체, 기반 JAVA_HOME)에서도 읽을 수 있는 변수를 사용할 수 있습니다. export해당하는 경우 귀하의 질문에 "Bourne Shell"이라는 프로그램이 실제로 무엇인지에 대해 알아보세요.~/.zshenv~/.zshrczsh -c 'sh /path/to/script'sh

또는 JAVA_HOME여러 위치에서 정의할 수 있고 sh구현에서 이를 지원하는 경우 스크립트의 shebang에 추가하거나 cron 작업 명령을 1로 변경하여 export로그인 셸로 ~/.profile호출 할 수 있습니다.sh-lsh -l /path/to/script

하지만 결국 가장 편리한 솔루션은 간단히 추가하는 것입니다.

JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/

crontab 상단에 한 줄로 표시합니다( JAVA_HOME물론 다른 값이 필요한 다른 크론 작업이 있는 경우는 제외).


1 너의 것 sh, 즉너무 가능하지 않음-l실제로(예를 들어) bash또는 dash.as 인 경우 "실제" Bourne 쉘스티븐 차제라스에서 지적했다논평, 1) Bourne 쉘을 구현하는 경우 또는POSIXsh(예: {Free,Net,Open}BSD에는 sh옵션이 없습니다.) -l2) -l이 옵션이 제공되면 지원되는 모든 구현이 읽히지 않습니다.~/.profile

답변2

두 개의 시스템 전체 구성 파일 /etc/bash.bashrc( /etc/bashrcDebian이 아닌 시스템의 경우) 및 /etc/zsh/zshenv(/etc/zshenv

문법은 동일하므로 복사해서 붙여넣으면 됩니다

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/

두 개의 파일로

관련 정보