解决Oracle缺少动态链接库cannot open shared object file: No such file o;解决 Linux中python脚本执行无问题,配置crontab定时任务报错

注:该问题的本质是:缺少动态链接库

20181030更:
在另一台服务器再次遇到类似的问题,也是直接执行python脚本无问题,在crontab中报错:

ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory

两次的报错信息极为类似,解决方法也相同,根据网络查询的解决方案,如下:
共有三种方案,每种方案都要记得刷新

  • 用ln将需要的so文件链接到/usr/lib或者/lib这两个默认的目录下边
ln -s /where/you/install/lib/*.so /usr/lib

然后刷新

sudo ldconfig
  • 修改LD_LIBRARY_PATH(在/etc/parofile)
export LD_LIBRARY_PATH=/where/you/install/lib:$LD_LIBRARY_PATH

然后刷新

sudo ldconfig
  • 修改/etc/ld.so.conf
vim /etc/ld.so.conf
add /where/you/install/lib

刷新

sudo ldconfig

问题描述:一段需要import cx_Oracle的python代码,在Linux下直接执行不会报错,但是配置在crontab中执行报错,报错信息如下:

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客户端,然而事实上已经安装64位客户端,并且直接执行不会出现问题。
后来百度了下,原因如下:

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

所以,就可以解释了:
首先,我仅对当前用户配置了LD_LIBRARY_PATH,即在~/.bashrc中,crontab用户无法访问。
其次,我没有在/etc/ld.so.conf文件中添加Oracle_home(/opt/oracle/instantclient_11_2)。
因而,最终报错。

解决方法:
解决方法很简单,
要么把oracle_home配置到系统环境变量中(/etc/profile)中,
要么在/etc/ld.so.conf中添加oracle_home路径(/opt/oracle/instantclient_11_2)。

参考资料:
参考链接

  • 3
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你在命令行可以成功执行脚本,但在添加到 crontab 后无法执行,并且 crontab 的日志显示 "No such file or directory" 错误,那么可能是由于 cron 环境的变量设置不同所导致的。 Cron 会在不同的环境执行命令,而这个环境与你在交互式命令行使用的环境有所不同。可能会存在以下问题解决方案: 1. 环境变量问题:cron 环境可能缺少一些环境变量,如 PATH 等。这可能导致脚本无法找到所需的文件或目录。 解决方案:在你的脚本使用绝对路径来引用文件和目录,以确保脚本可以找到它们。你可以通过运行 `echo $PATH` 命令来查看 cron 环境的 PATH 设置,并在脚本使用完整路径来引用文件和目录。 2. 工作目录问题:cron 在执行命令时,当前工作目录可能与你在交互式命令行使用的工作目录不同。这可能导致脚本无法找到相对路径下的文件或目录。 解决方案:在你的脚本使用绝对路径或切换到正确的工作目录。你可以在脚本的开头使用 `cd` 命令切换到正确的工作目录,或者使用绝对路径来引用文件和目录。 3. 权限问题:cron 以你设置的用户身份运行脚本,而这个用户可能没有访问某些文件或目录的权限。 解决方案:确保 cron 执行脚本的用户具有访问所需文件或目录的权限。你可以使用 `chmod` 命令修改文件或目录的权限,以便 cron 用户可以访问它们。 请在 crontab 指定完整路径和必要的环境变量,并确保 cron 用户具有执行脚本所需的权限,以解决 "No such file or directory" 错误。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值