oracle服务器调用 cx_Oracle 失败 DatabaseError ORA-01804 或 找不到 libclntsh.so

失败信息:

cx_Oracle.DatabaseError: DPI-1047: 
Cannot locate a 64-bit Oracle Client library: "libclntsh.so: 
cannot open shared object file: No such file or directory".
 See https://oracle.github.io/odpi/doc/installation.html#linux for help

或者

cx_Oracle.DatabaseError: Error while trying to retrieve text for error ORA-01804

本次是在oracle服务器上,在oracle用户下直接执行python正常,而定时任务调用python时失败。

这应该是当前用户与crontab定时执行时所用的环境变量不同,可以有两种办法修改:

1、在python代码中设置环境变量,如下:

    os.environ["ORACLE_BASE"] = '/home/oracle/app'
    os.environ["ORACLE_SID"] = 'xxx'
    os.environ["ORACLE_HOME"] = '/home/oracle/app/product/11.2.0/dbhome_1'
    os.environ["LD_LIBRARY_PATH"] = '$LD_LIBRARY_PATH:$ORACLE_HOME/lib'

再次调用定时任务后,执行成功。

2、改用shell设置环境变量后再调用python,如下新建 yyy.sh,在crontab调用此sh

#!/bin/sh
. /etc/profile
. ~/.bash_profile

python /home/oracle/xxxxx.py

测试成功.

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值