- PR -

JAVAをLinuxでcron実行出来ない

投稿者投稿内容
たんぼぼ
会議室デビュー日: 2004/05/26
投稿数: 17
お住まい・勤務地: 東京
投稿日時: 2006-04-13 10:09
JAVAの初心者で申し訳ありませんが、困っていますので
分かる方がいれば教えて下さい。

JAVAで検索した結果をメールで送るプログラムを書いたのですが
コンソール上では、問題なく実行出来るのですが、Linuxでcronを実行すると
動いてくれません。

環境
OS:CentOS 4.0
JAVAコンテナ:Tomcat5
データベース:postgres
メール:JavaMail

問題点の切り分けはしました。(cron実行出来るのは?)
1、Javaでファイル書き出しのみ(データベース、JavaMail使用しない状態)では
  問題なく、指定したファイルに書き出しの実行は出来ました
2、データベースで検索した結果を同様に書き出し処理したものは実行出来ませんでした。

cronの仕様なのですか?

教えて下さい。


あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-04-13 11:04
引用:

たんぼぼさんの書き込み (2006-04-13 10:09) より:

問題点の切り分けはしました。(cron実行出来るのは?)
1、Javaでファイル書き出しのみ(データベース、JavaMail使用しない状態)では
  問題なく、指定したファイルに書き出しの実行は出来ました
2、データベースで検索した結果を同様に書き出し処理したものは実行出来ませんでした。

cronの仕様なのですか?



ええと、、問題点の切り分けになってなさそうですね。
「実行出来ない」ではなく、「何故、実行出来ない」のかを調べましょう。
cronの仕様と質問されても飛躍しすぎで何を指してるのかさっぱりです。

環境変数等が通常のログイン時と変わることになるので、
その辺りを疑ってみるといいんじゃないでしょうか。
flatline
大ベテラン
会議室デビュー日: 2005/09/22
投稿数: 102
投稿日時: 2006-04-13 12:16
cron には、どのように登録されていますか?
シェルであれば、そのシェルの内容をここにアップすると、
回答がつきやすいと思います。
たんぼぼ
会議室デビュー日: 2004/05/26
投稿数: 17
お住まい・勤務地: 東京
投稿日時: 2006-04-13 21:53
営業に出ていて返信が遅くなりまして申し訳ありませんでした。
あしゅさんありがとうございました。
環境変数の問題だと疑ってはいましたが、cronでは、実行出来ないのには、
腑に落ちないのでスレを立てて、同じ経験がある人がいればヒントでもと思っていました。

flatlineさん、ありがとうございました。
cronの設定は、mail_startのシェルスクリプトを実行
* * * * * /java_sh/mail_start ←通常は、1日に一回のみ実行します。
root、postgresユーザの両方でも実行出来ませんでした(コンソール上はOK)

(mail_start)シェルスクリプト
#!/bin/sh
java /java_pro/MainProgram

のみです。
参考になるか分かりませんが、ご教授下さい。
のみです

あしゅ
ぬし
会議室デビュー日: 2005/08/05
投稿数: 613
投稿日時: 2006-04-14 01:18
引用:

(mail_start)シェルスクリプト
#!/bin/sh
java /java_pro/MainProgram



javaコマンドってスラッシュ区切りのクラス名指定なんか出来ませんけど…。
まさか?!と思って試してみましたが、やっぱり無理でした。
せん
ぬし
会議室デビュー日: 2002/03/04
投稿数: 397
投稿日時: 2006-04-14 05:27
引用:

たんぼぼさんの書き込み (2006-04-13 21:53) より:
(mail_start)シェルスクリプト
#!/bin/sh
java /java_pro/MainProgram



「コンソール上はOK」とありますので、シェルスクリプトの中身については問題ないと判断します。
# 重要と思われる所をマスクしているのでしょうかね。

上記スクリプトですと、java コマンドへの PATHを指定しておかないと動作しないとおもいます。

ちなみにこのような場合、まず最初に「/var/log/cron」などのログを確認すべきですが、
そちらは行なってないのですか?
たんぼぼ
会議室デビュー日: 2004/05/26
投稿数: 17
お住まい・勤務地: 東京
投稿日時: 2006-04-14 11:37
cronでは、環境変数は一切設定されていない状態で起動されること
とあるので、もう少し頑張ってみます。
http://www.sleepingbird.net/linux/cron.shtml
ひこうきが好き
会議室デビュー日: 2003/10/06
投稿数: 2
投稿日時: 2006-04-14 16:47
libgcj を消してみては?
yum -y remove libgcj とかで。
ワタシはこれで動いています。

java互換のファイルが邪魔をしていることがあります。(RedHat系)
cron実行してエラーがある場合は、ユーザー宛てにメールが来ます。
たとえば /var/spool/mail/{ユーザー名} などを参照してみてください。
もしエラーメッセージに「(/usr/lib/libgcj.so.***」とかがあれば、libgcjが邪魔をしている可能性が大いにあります。
j2sdkをインストールされているのなら(おそらく)不要なので yum コマンドでけします。
cron で動かすスクリプトには java のパスやクラスパスを書き連ねておけばうまくいくと思います。

[ メッセージ編集済み 編集者: ひこうきが好き 編集日時 2006-04-14 17:00 ]

スキルアップ/キャリアアップ(JOB@IT)