2017-07-09 11 views
1

私は以下のステートメントを持つシェルスクリプトを持っています。スタンドアローンを実行している間は正常に動作します。スタンドアロンシェルスクリプトはうまく動作していますが、crontabで動作しません

$ORACLEHOME/bin/sqlplus -s [email protected]$LINKNAME/$BDBPASSWORD <<EOF 
    DECLARE 
    COUNT1 NUMBER:=0; 
    BEGIN 
    EXECUTE IMMEDIATE 'DROP TABLE TABLE1'; 
    EXECUTE IMMEDIATE 'CREATE TABLE TABLE1 AS SELECT * FROM [email protected]'; 
    END; 
/

EOF 

私はこれをcrontabから呼び出すと失敗します。私のcrontabは次のようになります

*/1 * * * * /bin/sh /home/mig/Test.sh > /home/mig/Test.txt 

ログに次のエラーが表示されます。

Error 6 initializing SQL*Plus 
SP2-0667: Message file sp1<lang>.msb not found 
SP2-0750: You may need to set ORACLE_HOME to your Oracle software directory 

助けていただければ幸いです。

+0

[Pythonスクリプトは、クーロンで実行環境変数]の可能な重複(https://stackoverflow.com/questions/42114982/environment-variables-when-python-script-run-by-cron) – l0b0

+0

あなたスクリプトには 'ORACLEHOME'への参照が含まれていますが、エラーメッセージには' ORACLE_HOME'が記述されています。それは意図的なのでしょうか?また、スクリプトで使用されるすべての変数をどのように設定していますか? – l0b0

+0

私は変数を初期化し、そのスクリプトをメインスクリプトから呼び出す別のファイルを持っています。 – GSG

答えて

1

この行をシェルスクリプトの先頭に追加してください。

export ORACLE_HOME=/path/to/oracle/home/directory 

シェルでechoコマンドを使用して、ORACLE_HOME環境変数の値を取得します

+0

変数にoracleホーム・ディレクトリをエクスポートした別のスクリプトがあります。このスクリプトは、このスクリプトで呼び出されます。スクリプト1:エクスポートORACLEHOME = '/ u01/app/oracle/product/12.1.0.2/dbhome_1'スクリプト2:ソースscript1.sh – GSG

+0

これも追加してください。正確な理由はわかりませんが、うまくいくことを願っています。 –

+0

エラーはORACLE_HOMEを設定するように求めており、ORACLEHOMEを設定しているので、エラーが発生しています –

1

OracleはORACLE_HOMEを必要とし、あなたのスクリプトがORACLEHOMEを必要とします。
もちろん、ORACLE_HOMEを使用してスクリプトを変更する方が良いでしょうが、それは問題の根本的な原因ではありません。

crontabコマンドは、ログインスクリプトをスキップします。 ORACLE_HOMEが.profileに設定されていると思いますので、これを実行してください。

*/1 * * * * source ~/.profile; /bin/sh /home/mig/Test.sh > /home/mig/Test.txt 
関連する問題