.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
~/.zshrc
zsh -c 'sh /path/to/script'
sh
또는 JAVA_HOME
여러 위치에서 정의할 수 있고 sh
구현에서 이를 지원하는 경우 스크립트의 shebang에 추가하거나 cron 작업 명령을 1로 변경하여 export
로그인 셸로 ~/.profile
호출 할 수 있습니다.sh
-l
sh -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
옵션이 없습니다.) -l
2) -l
이 옵션이 제공되면 지원되는 모든 구현이 읽히지 않습니다.~/.profile
답변2
두 개의 시스템 전체 구성 파일 /etc/bash.bashrc
( /etc/bashrc
Debian이 아닌 시스템의 경우) 및 /etc/zsh/zshenv
(/etc/zshenv
문법은 동일하므로 복사해서 붙여넣으면 됩니다
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
두 개의 파일로