2017-05-05 1 views
0

私はPythonスクリプトでcx_Oracleライブラリを使用しています。私のコードは、Linux端末からPythonスクリプトで直接実行するとうまく動作しますが、crontabに入れたときにエラーが発生しています。cx_OracleパッケージはCrontab内で動作しません

!! DatabaseError:DPI-1047:Oracleクライアント・ライブラリをロードできません:libclntsh.so:共有オブジェクト・ファイルをオープンできません。そのようなファイルまたはディレクトリはありません。 !!トレースバック(最新の呼び出しの最後)を扱うOracle環境を取得することができない:: 輸入cx_Oracle !! DatabaseError:DPI-1005:

を扱うOracle環境を取得することができませんでし https://oracle.github.io/odpi/doc/installation.html DPI-1005

ヘルプはを参照してください。

私はこの問題を探査し、crontabを使用して実行したときに、環境変数が不足しているようです。 私はcrontabで次のようにエクスポートしようとしましたが、動作しません。

輸出LD_LIBRARY_PATH = 'は/ usr/libに/オラクル/ 11.2/client64/libに' 私は他のコードが正常に動作cx_Oracleパッケージを削除した場合

。私は私のマシンにインストールされているPythonのバージョンは1つだけです。

あなたのPythonのバージョンは?それは32ビットか64ビットですか? Python 2.6。 64ビット

cx_Oracleのバージョンは? バージョン6.0b1

お使いのOracleクライアント(インスタントクライアントなど)のバージョンは? はどのようにインストールされましたか?それはどこにインストールされていますか? oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

お使いのOSとバージョンは? CentOS 6.7

どのような環境変数を設定しましたか?どれくらい正確に設定しましたか? export LD_LIBRARY_PATH = '/ usr/lib/oracle/11.2/client64/lib'

答えて

0

明らかにcronはbashプロファイルをロードしないため、ラッパーを作成する必要があります。

したがって、必要な変数をエクスポートしてスクリプトを呼び出すbashラッパーを作成します。その後、crontabからそのラッパーを呼び出します。これが動作すると、crontabを編集したユーザーの変数が適切にエクスポートされていないことがわかります。

注:/etc/bashrcに追加することができます。ルートアクセス権を持っている場合は、すべてのユーザーが使用できるようになります。

一般的なラッパーとcronをラッパーを介して送信することもできます。

#!/bin/bash 

. ~/.bash_profile 
"$0" 

はcronの中に呼び起こすmy_bash_wrapper.sh:

0 1 * * * /my/loc/my_bash_wrapper.sh my_python_script arg1 arg2 
関連する問題