我想通过icrontab在Linux上安排任务,任务是用python编写的,必须导入cx_Oracle
模块,所以我在中导出ORACLE_HOME
和LD_LIBRARY_PATH
.bash_profile ,但是
它引发了错误:
libclntsh.so.11.1:无法打开共享对象文件。
由于可以通过在shell中发出命令来运行任务,如:
python a.py # ok
我将icrontab中的任务更改为调用我的Python脚本的shell脚本,但异常重现了吗?
# the shell script scheduled in icrontab
#! bash
python a.py
你能帮忙怎么做吗?
答案 0 :(得分:17)
您可能希望指定PATH
- 以及ORACLE_HOME
和LD_LIBRARY_PATH
- 以便cron(1)
知道在哪里找到二进制文件。
阅读“5 Crontab环境”here。
答案 1 :(得分:7)
libs位于
/u01/app/oracle/product/11.2.0/xe/lib
(对于Oracle XE)或类似的。
您应该将此路径添加到/etc/ld.so.conf
,或者此文件仅显示包含位置,如/etc/ld.so.conf.d
目录中的单独文件
我在/etc/ld.so.conf.d
中有oracle.conf,只有一个带路径的文件。没别了。
当然不要忘记将ldconfig作为最后一步运行。
答案 2 :(得分:3)
Cron在运行任务时不会加载用户的配置文件,您必须明确地在shell脚本中包含该配置文件。
答案 3 :(得分:1)
上周末,当我需要使用cx_Oracle时,我遇到了同样的问题。在花了很多时间尝试修改LD_LIBRARY_PATH变量以包含$ libACntsh.so所在的$ ORACLE_HOME / lib directoy后,我最终通过从所有Oracle xlibx.so库创建符号链接到/ lib / xlibx来解决问题。所以。这当然不是“最干净”的解决方案,但它有很好的工作机会而不会造成太多麻烦:
cd $ORACLE_HOME/lib
for f in `ls ./*.so*`; do;
sudo ln -s $ORACLE_HOME/lib/$f /lib/$f
done
在我这样做之后,cx_Oracle就像一个魅力。
答案 4 :(得分:1)
这篇文章帮助我解决了使用oracle_fdw
的PostgreSQL数据库链接到Oracle的类似问题。
我安装了oracle_fdw
但是当我尝试CREATE EXTENSION oracle_fdw;
时,我得到error could not load library libclntsh.so.11.1: cannot open shared object file: No such file or directory.
我检查了$ORACLE_HOME
,$PATH
和$LD_LIBRARY_PATH
。
仅在我将Oracle共享库放在Linux共享库之后才有效
echo /opt/instantclient_11_2 > oracle.conf
ldconfig
答案 5 :(得分:1)
如果你有libclntsh.so的问题,需要为/usr/lib/oracle/11.2/client64/lib
到/usr/lib
答案 6 :(得分:0)
在运行任何脚本之前,只需传递Oracle路径变量:
与perl一样,您可以在脚本开头添加以下内容:
BEGIN {
my $ORACLE_HOME = "/usr/lib/oracle/11.2/client64";
my $LD_LIBRARY_PATH = "$ORACLE_HOME/lib";
if ($ENV{ORACLE_HOME} ne $ORACLE_HOME
|| $ENV{LD_LIBRARY_PATH} ne $LD_LIBRARY_PATH
) {
$ENV{ORACLE_HOME} = "/usr/lib/oracle/11.2/client64";
$ENV{LD_LIBRARY_PATH} = "$ORACLE_HOME/lib";
exec { $^X } $^X, $0, @ARGV;
}
}
答案 7 :(得分:0)
我一直有这个问题,我可以通过运行下面的代码来解决: export LD_LIBRARY_PATH = / opt / oracle / instantclient:$ LD_LIBRARY_PATH
OBS:这段代码我保存在配置文件中,因为我总是使用它。 祝你好运。
答案 8 :(得分:0)
我已将所有库文件从安装程序媒体 databases / stage / ext / lib 复制到 $ ORACLE_HOME / lib ,并解决了该问题。
答案 9 :(得分:0)
为了其他任何人来到这里,最好的办法是将cx_Oracle
更新到最新版本(6+)。此版本根本不需要设置LD_LIBRARY_PATH
。
答案 10 :(得分:0)
我必须安装依赖项
oracle-instantclient12.2-basic-12.2.0.1.0-1.x86_64
答案 11 :(得分:0)
可能您需要sudo
进入使用相关环境设置注册的帐户:)