.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の上部に1行で表示します(JAVA_HOME
もちろん、異なる値を必要とする他のクローン操作がある場合を除く)。
1 あなたのものsh
、つまりできない-l
実際に(たとえば)bash
またはdash
.asの場合は「実際の」Bourneシェルスティーブン・チャジェラスで指摘したコメント、1)Bourneシェルを実装する場合、またはPOSIXsh
(例:{Free、Net、Open} BSDにはsh
オプションはありません。)-l
2)-l
このオプションが提供されている場合、サポートされているすべての実装は読み込まれません。~/.profile
答え2
2つのシステム全体の設定ファイル/etc/bash.bashrc
(/etc/bashrc
Debian以外のシステムの場合)と/etc/zsh/zshenv
(/etc/zshenv
文法は同じなので、コピーして貼り付けるだけです
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/
2つのファイルで