crontabのCLASSPATH

crontabのCLASSPATH

でJavaプログラムを実行できませんcron。次の簡単な例を使用して問題を再現できます。

ファイルで次のように変数を/path/to/javaenv.txt定義します。CLASSPATH

export CLASSPATH=\
"/path/to/dir1":\
"/path/to/dir2":\
"/path/to/dirn":\
"/path/to/jar1":\
"/path/to/jar2":\
"/path/to/jarn"

コマンドラインで次のようにすると、Javaプログラムを非常に簡単に実行できます。

source "/path/to/javaenv.txt" && java pkgName.ClassName cmd-line-params > /tmp/test-$(date +%s).txt 2>&1

cronただし、私のエントリに次のものがあってもジョブcrontabは実行されません。

* * * * * source "/path/to/javaenv.txt" && java pkgName.ClassName cmd-line-params > /tmp/test-$(date +%s).txt 2>&1

答え1

クローンスケジュールにはいくつかの問題があります。

  1. この文字はcrontabで特別な意味を持ち、コマンドラインで通常どおりに使用する%ようにエスケープする必要があります。\%バラよりcrontabジョブで「日付」を実行する方法は?

  2. source計画のコマンドは、それを解釈するシェルではサポートされていない可能性があります。これは/bin/shシステムのシェルによって異なります(dash非標準コマンドはサポートされていませんsource)。コマンドを移植可能にするには、.(ドット)置換を使用する必要があります。sourceたとえば、参照してください。cronで「ソース」を使用できませんか?

  3. java3番目の問題は、cron環境の変数値に基づいて実行可能ファイルが見つかるかどうかです。ファイルが見つかったことPATHを確認するには、crontabの正しいディレクトリ、取得した環境ファイルを含めるようにjava設定するか、絶対パスを使用して実行可能ファイルを呼び出します。PATH

関連情報