• ベストアンサー

CRONに組み込んだバッチが動かない

 クーロンで二つのバッチをスケジュールしてるのですが  二つ目のバッチが動きません。   なにが原因なのでしょうか?  ** cron_file の変更**  # DO NOT EDIT THIS FILE - edit the master and reinstall. # (/tmp/crontab.18554 installed on Tue Apr 4 13:15:59 2000) # (Cron version -- $Id: crontab.c,v 2.13 1994/01/17 03:20:37 vixie Exp $) 0 0 * * * /u02/oradata/bat/A001.bat > /u02/oradata/bat/A001.log 0 * * * * /u04/tanaka1/bat/B001.bat > /u04/tanaka1/bat/B001.log   * /u04/tanaka1/bat/B001.bat が 動かない    B001.bat は chmod 777 で実行権限を付与        $ B001.bat と 打つと    コマンドが見つからない と エラーメッセージが出ます。    一つ目のバッチは A001.log のタイムスタンプから動作してると思われます。    

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

  • ベストアンサー
  • osamuy
  • ベストアンサー率42% (1231/2878)
回答No.2

crondは、実行したコマンドが(標準出力または標準エラー出力に)何らかの出力した場合、その内容をコマンド実行ユーザにメールします。 質問のcrontabだとstderrがリダイレクトされてないので、エラーがメールされてると思われます。メール配送システムが使えればですが。 crondからメールが届いてないか確認するか、stderrをファイルにリダイレクトしてみては。

参考URL:
http://www.itmedia.co.jp/help/tips/linux/l0388.html
PYTHON357
質問者

お礼

bat/B001.bat 1>STD.LOG 2>ERR.LOG と 書けば 標準出力も エラー出力も ファイル化されるので デバッグしやすいって事ですね。

その他の回答 (4)

  • Lean
  • ベストアンサー率72% (435/603)
回答No.5

> telnetで > /u04/tanaka1/bat/B001.bat > と打つと動作しますが スクリプト自体は正常に動作するようですね。 > クーロンに組み込むと途中で > 止まってるようです。 と言うことになるとtelnetでログインして実行した環境とcronで実行した時の環境の違いにより正常に動作しなくなるようですね。 この途中で止まっているというのはエラーになって終了、もしくはスクリプトに記述したコマンドが動作したままだんまりのどちらでしょうか? エラーになるのでしたら、エラーメッセージが出力されていれば、そのエラーメッセージからどうすればいいかが分かるかもしれません。 ちなみにtelnetでログインして実行した時のユーザは、cronに登録した時のユーザと同一ユーザでしょうか、それとも別なユーザでしょうか? (たぶん、結果からすると別ユーザでしょうかね) cronに登録した時のユーザで同様にスクリプトファイルを実行するとcronで実行した時と同じく途中で止まりますか?

PYTHON357
質問者

補足

>ちなみにtelnetでログインして実行した時のユーザは、cronに登録した時のユーザと同一ユーザでしょうか、 >それとも別なユーザでしょうか? 同一ユーザです。

  • Lean
  • ベストアンサー率72% (435/603)
回答No.4

>$ B001.bat と 打つと > >   コマンドが見つからない と エラーメッセージが出ます。 これは、No.1の方も書いている通り、コマンドのサーチパス(環境変数PATH)に「B001.bat」が存在するディレクトリが無かっただけでは? 確認したかった事はcrontabに書いてあるように # /u04/tanaka1/bat/B001.bat と実行した場合には正常に動作するのかどうかという事です。

PYTHON357
質問者

補足

>確認したかった事はcrontabに書いてあるように ># /u04/tanaka1/bat/B001.bat >と実行した場合には正常に動作するのかどうかという事です。  telnetで  /u04/tanaka1/bat/B001.bat  と打つと動作しますが  クーロンに組み込むと途中で  止まってるようです。

  • Lean
  • ベストアンサー率72% (435/603)
回答No.3

cronでcrontabで設定した内容が実行されたかは、cronのログ/var/log/cronを見れば分かります。 以下のようなログが残っていれば、cronからは起動されたという事です。 ○/var/log/cronの出力例  「/bin/date > /tmp/LOG」をユーザrootで実行した場合 -------8<-------8<-------8<-------8<-------8<------- Apr 16 15:41:01 FedoraCore3 crond[4918]: (root) CMD (/bin/date > /tmp/LOG) -------8<-------8<-------8<-------8<-------8<------- もしcronのログから「B001.bat」が起動されており、標準出力に何らかの出力があるのに標準出力をリダイレクトしたファイルに何も出力されていない場合、指定した「B001.bat」に問題があるとしか思えません。 No.2の方が書かれているようにcronからのメールがないか確認するか、標準エラー出力をファイルにリダイレクトして確認した方がいいでしょうね。 ところで、指定した「B001.bat」は、cronで実行させようとしているユーザ(crontabコマンド実行時のユーザ)でそもそも正常に動作する事は確認しているのでしょうか? P.S. この質問に関連すると思われる質問をしていらっしゃると思いますが。 それらについて出来れば質問の内容が解決したのなら質問を締め切ってもらえないでしょうか? 解決したのかしていないのか反応がないため分からないので。

PYTHON357
質問者

補足

>ところで、指定した「B001.bat」は、cronで実行させようとしているユーザ(crontabコマンド実行時のユーザ)で >そもそも正常に動作する事は確認しているのでしょうか? $ B001.bat と 打つと    コマンドが見つからない と エラーメッセージが出ます。 質問自体は自宅で 動作確認は会社でやってるので この質問に対する結果は 4月18日(月)にならないと分かりません。

回答No.1

$ B001.bat でコマンドがないエラーとなるのは、カレントディレクトリにパスがないからではありませんか?その実行ファイルのあるディレクトリで $ ./B001.bat でもダメでしょうか。 cronが動かないのはちょっと理由がわかりませんが、/var/log/message(あるいは何らかのログ)にcrondからのログが出ていると思いますので、それを見たら何か手がかりがあるかもしれません。

PYTHON357
質問者

補足

$ ./B001.bat で動きました。 /var/log/message は現在のユーザーでは アクセス権限がありませんでした。

関連するQ&A