2017-05-05 132 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