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の上部に1行で表示します(JAVA_HOMEもちろん、異なる値を必要とする他のクローン操作がある場合を除く)。


1 あなたのものsh、つまりできない-l実際に(たとえば)bashまたはdash.asの場合は「実際の」Bourneシェルスティーブン・チャジェラスで指摘したコメント、1)Bourneシェルを実装する場合、またはPOSIXsh(例:{Free、Net、Open} BSDにはshオプションはありません。)-l2)-lこのオプションが提供されている場合、サポートされているすべての実装は読み込まれません。~/.profile

おすすめ記事