- ベストアンサー
crontabでsql/plusの起動
シェルスクリプトでsql/plusを呼び出し、ストアドプロシジャを 実行しようとしているのですが、crontabを使ったスケジュール起動を 行おうとすると、以下のようなエラーになってしまいます。 Message file sp1<lang>.msb not found Error 6 initializing SQL*Plus not foundと言われているファイルに心当たりがありません。 sql/plusがバックグラウンドで使っているファイルなのでしょうか? ちなみに、crontabを使わずに、コマンドラインから このシェルスクリプトを実行すると、正常に動作します。 UNIXもシェルスクリプトも超初心者です。 ご存知の方おられましたら、ご教授願います。 OSはRedHat6.2J、Oracle8.1.7です。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
白黒ならず、黒白です。 多分ですが、以下のような環境変数を設定することで、 解決できるかと思われます。 (あくまでも参考にして下さい) miya777さんの言われるように、cronでは環境変数といわれるものが ひきつぎされないため、シェルの中で再度設定する必要があります。 setenv ORACLE_BASE /xxxx/oracle setenv ORACLE_HOME $ORACLE_BASE/product/8.1.5 setenv ORACLE_SID xxxxx setenv NLS_LANG Japanese_Japan.JA16EUC setenv ORA_NLS33 $ORACLE_HOME/xxxxx/... setenv LD_LIBRARY_PATH $ORACLE_HOME/lib set path=( . /usr/bin /sbin /usr/sbin /usr/ccs/bin /opt/bin /opt/local/bin /usr/ucb /xxxx/.../oracle/product/8.1.5/bin $path ) ちなみに、envコマンドにて上記のsetenvコマンドの内容は 参照できるかと思います。 結構、cronで起動する場合は、注意していないと環境変数 については忘れがちになる部分です。 この回答でうまくいけばと思います。 でわ
その他の回答 (1)
- miya_777
- ベストアンサー率31% (44/140)
cronで起動した場合、下記の環境変数しか設定されません。 HOME=user's-home-directory LOGNAME=user's-login-id PATH=/usr/bin:/usr/sbin:. SHELL=/usr/bin/sh なので、パスもORACLE_HOMEも不充分となります。 起動するシェルのなかで、環境変数をちゃんと設定しないと駄目です。
補足
回答ありがとうございます。少し補足しますと、 起動するシェルは、以下のように記述しております。 #!/bin/bash PATH=/usr/local/bin:/bin:/usr/bin:/usr/X11R6/bin:/home/oracle/product/8.1.7/ bin; export PATH /home/oracle/product/8.1.7/bin/sqlplus @/home/oracle/product/8.1.7/bin/test 「ORACLE_HOMEをシェルの中で設定する」という部分が よくわからないのですが.......
お礼
blackwhiteさん、親切な回答ありがとうございます。 お返事が遅くなってしまってすみません。 あれから、色々調べてやってみてblackwhiteさんの言うような 環境変数の設定までなんとかたどりつきました。 勉強不足でお手数おかけしてすみませんでした。 大変勉強になりました。ありがとうございます!