• ベストアンサー

crontabでjavaだけが上手く動いていない

こんにちは、質問をさせていただきます。 Linux(FC5)でCrontabコマンドとplファイルを利用して、JAVAを定期的に起動させようとしています。 plファイルのログでは処理が実行されたようになっているのですが、何故かJAVAが起動していません。(結果からJAVAが実行されていません) Crontabでなく、手動でplファイルを実行すると問題なくJAVAは起動されます。 plファイルの詳細とcrontabの詳細およびファイルのモードは下記のとおりです。 よろしくお願いします。 ・plファイル  cd /javaのディレクトリ  /usr/java/jdk1.5.0_08/bin/java javaファイル  echo "実行" >> date.log  date >> date.log ・Crontab  00 17 * * * /plファイル ・crontabのファイルモード  -rw------- 1 root root 42 12月 21 16:58 root 以上

質問者が選んだベストアンサー

  • ベストアンサー
  • notnot
  • ベストアンサー率47% (4900/10358)
回答No.4

直接起動するとうまく行くのにcronで駄目なのは、99.9%環境変数の問題です。 cronで起動されるプロセスでは、 PATH=/usr/bin:/bin HOME=/root LOGNAME=root SHELL=/bin/sh PWD=/root 程度しか環境変数が設定されません。必要な環境変数は、起動されるプロセス内で定義するか、crontabファイル内に書く必要があります。この場合は、crontabファイルの先頭に、 PATH=... JAVAHOME=... CLASSPATH=... と書けばいいです。

rabre98
質問者

お礼

ご返答ありがとうございます。 ご指摘のとおりに、crontabファイルの先頭にPATH、JAVAHOME、CLASSPATHを追加したところ処理に成功いたしました。 plファイルに環境変数を追加しても駄目でしたので、環境変数ではないのかと思っていましたが、ご指摘のとおり問題は環境変数でした。 おかげで、仕事が越年せずに済みました。 大変助かりました。 ありがとうございました。 以上

その他の回答 (3)

  • hide76318
  • ベストアンサー率18% (2/11)
回答No.3

前に似たような事をやってて、次のように解決しました。 cronの実行ユーザはrootではない可能性があるので シェルスクリプト内で環境変数をセットしたんです。 #!/bin/bash PATH=/usr/java/jdk1.5.0_08/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/java JAVA_HOME=/usr/java/jdk1.5.0_08 CLASSPATH=.:/usr/java/jdk1.5.0_08/lib/tools.jar:/usr/java/jdk1.5.0_08/lib/postgresql-8.1407.jdbc3.jar:/usr/java/jdk1.5.0_08/lib/ojdbc14_g.jar:/usr/java/jdk1.5.0_08/lib/postgresql.jar:/usr/java/jdk1.5.0_08/lib/postgresql-8.1-407.jdbc2.jar /usr/java/jdk1.5.0_08/bin/java bumon  >> date.log 2>&1 echo "部門 コピー" >> date.log date >> date.log こんな感じで。

rabre98
質問者

お礼

ご返答ありがとうございます。 plファイルに環境変数を追加して、結果は駄目でしたが問題はご指摘のとおり問題は環境変数でした。 今回の件は,大変勉強になりました。 ありがとうございました。 以上

  • tanshio2
  • ベストアンサー率54% (20/37)
回答No.2

JavaのCLASSPATHなどの環境変数をcronを実行してるユーザにきっちり設定していますか? ログインシェルに書いてあってもそれは無意味です。 簡単なのはそのcronで動かすperlファイルに必要な環境変数をきっちりと設定してみるとか。

rabre98
質問者

補足

早速のお答えありがとうございます。 確かにJAVA実行時に「java.lang.ClassNotFoundException:org.postgresql.Driver」が発生していたので、envコマンドでCLASSPATHの環境変数を確認しましたが、問題になりそうな部分はありませんでした。 cronで起動する場合は、何か別の環境設定が必要なのでしょうか? 必要なのであれば、できればその設定方法も教えてください。 よろしくお願いします。 ・envの結果(抜粋) SHELL=/bin/bash USER=root PATH=/usr/java/jdk1.5.0_08/bin:/usr/kerberos/sbin:/usr/kerberos/bin:/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:/root/java JAVA_HOME=/usr/java/jdk1.5.0_08 CLASSPATH=.:/usr/java/jdk1.5.0_08/lib/tools.jar:/usr/java/jdk1.5.0_08/lib/postgresql-8.1407.jdbc3.jar:/usr/java/jdk1.5.0_08/lib/ojdbc14_g.jar:/usr/java/jdk1.5.0_08/lib/postgresql.jar:/usr/java/jdk1.5.0_08/lib/postgresql-8.1-407.jdbc2.jar ・plファイル(ログを取得するように変更) /usr/java/jdk1.5.0_08/bin/java bumon  >> date.log 2>&1 echo "部門 コピー" >> date.log date >> date.log

  • ham_kamo
  • ベストアンサー率55% (659/1197)
回答No.1

直接の回答ではありませんが、  /usr/java/jdk1.5.0_08/bin/java javaファイル を  /usr/java/jdk1.5.0_08/bin/java javaファイル >> date.log 2>&1 として何かエラーが出力されてないかcronで実行して調べてみてはいかがでしょうか。

rabre98
質問者

お礼

早速のお答えありがとうございます。 ご指摘のとおりにログにJAVAのエラーを吐き出すようにした結果、実行時に「java.lang.ClassNotFoundException:org.postgresql.Driver」が発生していました。 しかし、envコマンドでCLASSPATHの環境変数を確認しましたが、問題になりそうな部分はありませんでした。 他にも気をつけるべきところなどがあればお教えください。 よろしくお願いします。 ・plファイル(ログを取得するように変更) /usr/java/jdk1.5.0_08/bin/java bumon  >> date.log 2>&1 echo "部門 コピー" >> date.log date >> date.log 以上

関連するQ&A