2017-05-05 72 views
0

我在我的python腳本中使用了cx_Oracle庫。我的代碼工作正常,如果我直接從Linux終端執行python腳本,但是當我把它放在crontab中時,我得到下面的錯誤。cx_Oracle軟件包不能在Crontab中工作

!! DatabaseError:DPI-1047:Oracle客戶端庫無法加載:libclntsh.so:無法打開共享目標文件:沒有這樣的文件或目錄。見https://oracle.github.io/odpi/doc/installation.html求助

DPI-1005:無法獲取Oracle環境處理 !!回溯(最近通話最後一個): 進口cx_Oracle !! DatabaseError:DPI-1005:無法獲取Oracle環境處理

我googled這個問題,它似乎有一些環境變量,當它運行使用crontab時丟失。 我嘗試導出以下在crontab中,但它不起作用。

出口LD_LIBRARY_PATH = '/ usr/lib中/ ORACLE/11.2/client64/lib中'

如果刪除cx_Oracle包中的其它代碼運行正常。我的機器上只安裝了一個python版本。

什麼是您的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

什麼是您的操作系統和版本? CentOS 6.7

你設置了什麼環境變量?你究竟如何設定它們? export LD_LIBRARY_PATH ='/ usr/lib/oracle/11.2/client64/lib'

回答

0

很明顯cron不會加載bash配置文件,因此您需要編寫一個包裝器。

因此,編寫一個bash包裝器,用於導出所需的變量並調用腳本。然後從crontab調用這個包裝器。當它工作時,你會知道你的變量沒有被正確導出給你編輯了crontab的用戶。

注意:您可以將它們添加到/etc/bashrc中,如果您擁有root用戶訪問權限,則它將適用於所有用戶。

你也可以使一個通用的包裝和cron的東西通過包裝發送它們。

my_bash_wrapper.sh

#!/bin/bash 

. ~/.bash_profile 
"$0" 

喚起在cron:

0 1 * * * /my/loc/my_bash_wrapper.sh my_python_script arg1 arg2