cx_Oracle.DatabaseError: DPI-1047: 64-bit Oracle Client library cannot be loaded:定时任务问题

问题:python代码需要在import cx_Oracle,在docker中使用./zysprProject.py执行没有任何问题,但是当在crontab -e 配置定时任务时:

0  9  *  *  *  /usr/bin/python3 /home/zysprProject.py >> /home/zyspr.log 2>&1

报错:

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

以上报错是无法找到64位Oracle客户端,但在docker中已经安装了64位客户端cx_Oracle,并且直接执行是没有问题的,原因是啥呢....
原因如下:

libclntsh.so是OCI客户端运行时库,Oracle如果程序使用了oci读写数据库必定会装载这个库。一般位于你安装的oracle客户端目录下,比如我的位于/usr/local/lib/python3.6/instantclient_11_2
程序运行时会去两个路径下寻找:①/etc/ld.so.conf所列路径下;②当前用户的环境变量LD_LIBRARY_PATH。如果这两个地方都找不到就会报错,说找不到这个库。
crontab有自己的用户账号,和当前用户的环境变量不共享。

所以,我仅对当前用户配置了LD_LIBRARY_PATH,即在/etc/profile中,crontab用户无法访问。
其次,我没有在/etc/ld.so.conf文件中添加Oracle_home(/usr/local/lib/python3.6/instantclient_11_2),所以报错。

解决方法有2种:
第一种:把oracle_home配置到系统环境变量中(/etc/profile)中,
第二种:在/etc/ld.so.conf中添加oracle_home路径(/usr/local/lib/python3.6/instantclient_11_2)。

注意:第二种添加方式如下:

[root@eb77a4aaff3b etc]# vi ld.so.conf
include ld.so.conf.d/*.conf
include /usr/local/lib/python3.6/
instantclient_11_2

保存,退出,添加完输入ldconfig使其生效。

[root@eb77a4aaff3b etc]# ldconfig

参考文件:
https://blog.csdn.net/xpy123/article/details/45039213?utm_source=blogxgwz2

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值