• ベストアンサー

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% (4848/10262)
回答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

  • Fedora11 crontab 設定エラー

    Fedora11「crontab -l」が「コマンドが見つかりません」になる。 (Q1) Fedora11で、cron を利用したく動作テストしています。 crontab は、/etc内にあります。 [root@betasei etc]# ls -l crontab* -rwxrwxrwx. 1 root root 420 2011-05-18 10:36 crontab テスト用スクリプトです。 [root@betasei etc]# cat test.sh echo xxxxxxxx gedit crontab で次のように編集しました。 [root@betasei etc]# cat crontab SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin/:/etc/ MAILTO=root HOME=/ # .---------------- minute (0 - 59) # | .------------- hour (0 - 23) # | | .---------- day of month (1 - 31) # | | | .------- month (1 - 12) OR jan,feb,mar,apr ... # | | | | .---- day of week (0 - 6) (Sunday=0 or 7) OR #sun,mon,tue,wed,thu,fri,sat # | | | | | # * * * * * command to be executed 1 1 * * * /etc/test.sh 設定確認すると、次のようにエラーになります。 [root@betasei etc]# ./crontab -l ./crontab: line 13: 1: コマンドが見つかりません [root@betasei etc]# 1 1 * * * /etc/test.sh ここのところを ./test.sh にしてみたりしてもダメです。 どうしたらよいのでしょうか。 (Q2) ところで、crontabの編集は、ターミナルやろうとして、 crontab -e と実行すると、viか何かの空白編集画面が出ます。 上記 gedit crontab の画面のように初期値が出ません。 gedit crontabで編集してもよいのですね。 (Q3) /etc/crontab は、テキストファイルですね。 でも、このcrontabは実行ファイルですね。 ./crontab -l どうなってるですか。 初歩的な質問ですみません。

  • LinuxにJAVAをインストしたのですが。

    Turbolinux6.5Serverにrootユーザーでrpm -Uvh jdk-1.3.1_01.i386.rpmを実行してJAVAをインストール後、確認のためexport PATH=/usr/jdk1.3.1/binを打ってパスが通ったことを確認し、でvi ~/.bash_profileでファイルを開きPATH="$PATH:/usr/java/jdk1.3.1/binを一行追加し、再起動後javac▲Hello.javaをコンパイルしようとしたのですが、bash: javac: command not found と出て実行できません。どうしたらよいのでしょうか。設定が足りないのでしょか? どなたか教えてください!

  • crontabをshellで実行するには?

    Linux(Centos 6.2)でユーザを追加する際に、 そのユーザ権限で定期的に実行するプログラム(getmail)を設定したいと思っています。 で、shellでユーザを追加しようと思って #!/bin/sh # $1 = user $2 = pass $USRDIR = ユーザのホームディレクトリ useradd -d $USRDIR $1 echo "$1:$2\n" | chpasswd chown -R $1 $USRDIR chmod -R 770 $USRDIR echo "*/1 * * * * $1 /usr/bin/getmail 2>/dev/null\n" >> /etc/crontab としようと思ったのですが、 色々なサイトで、「crontabの設定ファイルを直接書くのは良くない、crontabコマンドを使え」と言われており、 crontabで設定したいのですが、crontab -u $1 -e とすると、viが起動してしまい、 どうしたら良いかわかりません。。。 どうしたら良いのでしょうか? お願いします。

  • crontab -lの結果取得

    教えて下さい。 <? $lines = shell_exec("crontab -l"); echo $lines; ?> 上記結果でcronのジョブ一覧を取得したかったのですが、期待通りの結果が返ってきませんでした。(何も取得できませんでした。) crontab -l自体は通常のコマンドとして使えているのですが、、 実行ユーザーの問題かと思い、"crontab -u root -l"ともしてみましたが結果は同じでした。 また、パスの問題かと思い、"/usr/bin/crontab -u root -l"ともしてみましたが結果は同じでした。 この場合、どこが問題となっているのでしょうか。 宜しくお願い致します。 FedoraCore9 php-5.2.5-7.fc9.i386 httpd-2.2.9-1.fc9.i386

    • ベストアンサー
    • PHP
  • crontabの設定について

    某サイトを参考にIPアドレスの自動アップデート スクリプトを作成しました。 OSはCentOS6.2です。 その後、crontab -e を実行(中は空で何も記入されていませんでした)しました。 本来vi /etc/crontab で編集するのかなと思ったのですが、以前使用していたvinelinuxのcrontabと表示形式が違っていたので、何も書き込んでいません。 crontab -e 実行後、下記内容を貼り付け保存しました。MAIL TO は空欄たったのですが、スクリプトが正常に実行されているかメールで受信したいため、下記設定をしました。すると確かにメールは10間隔で届くのですが、内容は下記エラーです。 エラー内容 /bin/bash: root: command not found crontab 設定内容 SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO={ローカルドメイン内のメールアドレス記載} HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly # DDNS */10 * * * * root perl /usr/ddns/ipchk.pl 00 5 * * 0 root rm -f /usr/ddns/CRT_IP.dat スクリプトの内容は下記のとおりです。スクリプトの中にwgetコマンドがあるのですが、centos6.2ではwgetが最初から入っていました。念のためyum -y install wget を実行したところすでにインストール済みの表示が出ました。(command not found と言うエラーからwgetが実行されないのかな、と勝手に思った次第です) #!/usr/local/bin/perl (which perl 実行結果 /usr/local/bin/perl と表示がでたのでそれに従いました) # $CRT_IPF = '/usr/ddns/CRT_IP.dat'; $NEW_IPF = '/usr/ddns/NEW_IP.dat'; $LOG = '/var/log/ddns.log'; open INPUT,"$CRT_IPF"; $CRT_IP=<INPUT>; close INPUT; system("/usr/local/bin/wget -q -O $NEW_IPF {ここには REMOTE_ADDR:の結果が取得できる登録済みDDNSのアドレス記入}"); open(INPUT,$NEW_IPF); $c = <INPUT>; $stp = index($c,"REMOTE_ADDR:")+12; $edp = length($c); $NEW_IP = substr($c,$stp,($edp-$stp)); close(INPUT); if ($NEW_IP ne "" and $CRT_IP ne $NEW_IP) { open (OUTPUT ,">$CRT_IPF"); print OUTPUT $NEW_IP; close OUTPUT; print "IP Address update: $CRT_IP to $NEW_IP\n"; system("/usr/bin/wget -q -O - '{DDNSのIP更新サイトのアドレス記載 &ドメイン&pw=パスワード}'"); $now_string = localtime; open (OUTPUT ,">>$LOG"); print OUTPUT "$now_string DDNS IP Address Updated. $CRT_IP to $NEW_IP\n"; close OUTPUT; } 何がいけないのでしょうか。よろしくお願いします。

  • crontabの設定ができない(編集画面が出ない)

    CentOS5.2を使っています。 crontabの設定を行おうと、 # chkconfig --list crond crond 0:off 1:off 2:on 3:on 4:on 5:on 6:off で確認後、$ crontab -e  としましたが、 no crontab for aaabbb - using an empty one と出て、編集ファイルが表示されません。 $ crontab -l  とすると no crontab for aaabbb と出、 # crontab -l  も    no crontab for root  となります。   念のため # chmod 777 /etc/crontab としてみましたが、結果は同じです。 $ less /etc/crontab でファイルを開くと ------------------------ SHELL=/bin/bash PATH=/sbin:/bin:/usr/sbin:/usr/bin MAILTO=root HOME=/ # run-parts 01 * * * * root run-parts /etc/cron.hourly 02 4 * * * root run-parts /etc/cron.daily 22 4 * * 0 root run-parts /etc/cron.weekly 42 4 1 * * root run-parts /etc/cron.monthly /etc/crontab (END) ---------------------- となっています。 Webで設定例を検索すると、no crontab for aaabbb - using an empty one の下に crontab: installing new crontab と出ると記載されているのですが、 私の場合、このような表示や動きは出ませんが、どのようにして crontab を設定していくのでしょうか。どうか宜しくお願いします。

  • 環境変数JAVA_HOMEとPATHの違い

    JAVAをはじめて間もない初心者です。 ふと疑問に思ったことがあるので、質問させていただきます。 先日、自宅サーバ(CentOS4.6)にjava(j2sdk1.4.2_16)をインストールしたのですが、OSに元々javaがインストールされていました。 SHELL># whereis java と打つと[java: /usr/bin/java]と出てきて、実際/usr/bin以下にjavaの実行ファイルがあります。 自分でインストールしたjavaは /usr/loacl/j2sdk1.4.2_16というディレクトリを作成してその下に展開しています。 システムの環境変数に自分でインストールしたjavaを指定しようと SHELL># export JAVA_HOME=/usr/local/j2sdk1.4.2_16 SHELL># export PATH=${JAVA_HOME}/bin:${PATH} と設定したのですが、 $PATHには/usr/binも設定されています。 javaを実行した場合は、どちらのjava実行ファイルが参照されるのでしょうか? (OSに元からインストールされているjava[/usr/bin/java]なのか、自分でインストールしたjava[/usr/local/j2sdk1.4.2_16/bin/java]なのか) そもそも、JAVA_HOMEは何のために設定するのでしょう?googleなどで「JAVA_HOMEとは」などと調べたのですが、イマイチ僕の欲しい答えが出てきません。 javaへのPATHさえ設定していれば、問題ないような気がするのですが、、。 とても稚拙な質問だと思いますが、良ければアドバイスよろしくお願いします。

    • ベストアンサー
    • Java
  • fedoracore5にjavaをインストールする方法

    http://www.java.com/ja/download/help/5000010500.xml#14 のページを見ながらやったけどうまくいかなかった。 どこが間違ってますか? [root@windows ~]# cd /usr/lib64/mozilla-1.7.12/plugins [root@windows plugins]# ls -s /usr/java/jdk1.5.0_06/jre/plugin/i386/ns7/libjavaplugin_oji.so 136 /usr/java/jdk1.5.0_06/jre/plugin/i386/ns7/libjavaplugin_oji.so [root@windows plugins]#

  • Tomcatの起動ができません。

    初めまして。 Tomcatについてなのですが、 インストール自体はできたみたいで、Tomcatのフォルダの直下のbinの直下のstartup.shを実行しても、 ---------------------------------------- [root@java bin]# ./startup.sh Using classpath: /usr/src/jakarta/jakarta-tomcat/lib/*:/usr/java/jdk1.3.0_02/lib /tools.jar [root@java bin]# ----------------------------------------- のようになり、Tomcatが起動されません。 何かわかることがありましたら、ご教授お願い致します。 ちなみに環境設定は以下のようにrootディレクトリ直下の.bashrcに設定しています。 export JAVA_HOME=/usr/java/jdk1.3.0_02 export PATH=$PATH:$JAVA_HOME/bin export TOMCAT_HOME=/usr/src/jakarta/jakarta-tomcat

    • ベストアンサー
    • Java
  • "java" が実行できません("java.exe" は実行できる)

    先日 J2SDK 5.0 Update 6 をインストールした際、 この問題に遭遇しました。 PATH も CLASSPATH も正常に設定されています。 しかし、"java" が実行できません。 ところが、"java.exe" とすると実行できます。 これはいったいどういうことなのでしょうか? 以下にいくつかの実行例を載せます。 OS は Windows XP SP1 です。 [実行例] C:\>java [結果] 'java' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 となるのですが、.exe をつけると以下のように Usage が表示されます。 [実行例] C:\>java.exe [結果] Usage: java [-options] class [args...] (to execute a class) 以下、絶対パス指定した場合も同じ結果です。 [実行例] C:\java\jdk1.5.0_06\bin\java [結果] 'C:\java\jdk1.5.0_06\bin\java' は、内部コマンドまたは外部コマンド、 操作可能なプログラムまたはバッチ ファイルとして認識されていません。 [実行例] C:\java\jdk1.5.0_06\bin\java.exe [結果] Usage: java [-options] class [args...] (to execute a class)