アプリ版:「スタンプのみでお礼する」機能のリリースについて

こんにちは、質問をさせていただきます。
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

以上

A 回答 (4件)

直接起動するとうまく行くのにcronで駄目なのは、99.9%環境変数の問題です。



cronで起動されるプロセスでは、
PATH=/usr/bin:/bin
HOME=/root
LOGNAME=root
SHELL=/bin/sh
PWD=/root
程度しか環境変数が設定されません。必要な環境変数は、起動されるプロセス内で定義するか、crontabファイル内に書く必要があります。この場合は、crontabファイルの先頭に、
PATH=...
JAVAHOME=...
CLASSPATH=...
と書けばいいです。
    • good
    • 0
この回答へのお礼

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

以上

お礼日時:2006/12/25 10:51

前に似たような事をやってて、次のように解決しました。


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

こんな感じで。
    • good
    • 0
この回答へのお礼

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

以上

お礼日時:2006/12/25 10:56

JavaのCLASSPATHなどの環境変数をcronを実行してるユーザにきっちり設定していますか?


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

この回答への補足

早速のお答えありがとうございます。
確かに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

補足日時:2006/12/22 13:21
    • good
    • 0

直接の回答ではありませんが、


 /usr/java/jdk1.5.0_08/bin/java javaファイル

 /usr/java/jdk1.5.0_08/bin/java javaファイル >> date.log 2>&1
として何かエラーが出力されてないかcronで実行して調べてみてはいかがでしょうか。
    • good
    • 0
この回答へのお礼

早速のお答えありがとうございます。
ご指摘のとおりにログに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

以上

お礼日時:2006/12/22 13:42

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!