cx_Oracle软件包在Crontab中不起作用

问题描述 投票:0回答:3

我正在python脚本中使用cx_Oracle库。如果我直接从Linux终端通过python脚本执行代码,则我的代码工作正常,但是当我将其放入crontab时,出现以下错误。

!! DatabaseError:DPI-1047:无法加载Oracle客户端库:libclntsh.so:无法打开共享对象文件:没有此类文件或目录。参见https://oracle.github.io/odpi/doc/installation.html以获取帮助

DPI-1005:无法获取Oracle环境句柄!! Traceback(最近通话最近):导入cx_Oracle!! DatabaseError:DPI-1005:无法获取Oracle环境句柄

我用谷歌搜索了这个问题,使用crontab运行时似乎缺少一些环境变量。我尝试在crontab中导出以下内容,但不起作用。

export 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客户端(例如Instant Client)?它曾是怎样的安装好了吗?它安装在哪里?oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

您的操作系统和版本是什么?CentOS 6.7

您设置了哪些环境变量?您如何设置它们?导出LD_LIBRARY_PATH ='/ usr / lib / oracle / 11.2 / client64 / lib'

oracle environment-variables crontab cx-oracle
3个回答
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

0
投票

您应该在bash脚本中设置ORACLE_HOME和LD_LIBRARY_PATH。

#!/bin/bash

export ORACLE_HOME=/usr/lib/oracle/<version>/client(64)
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

0
投票

由于它正在寻找oracle即时客户端路径,因此无法正常工作。在shell脚本中,添加导出行并将其指向您的oracle客户端路径。接下来,继续编写您的Shell脚本。这将起作用!

#!/bin/sh
export LD_LIBRARY_PATH=/home/<user_name>/opt/oracle/instantclient_19_5:$LD_LIBRARY_PATH
/usr/anaconda3/bin/python /home/<user_name>/test/src/test.py
© www.soinside.com 2019 - 2024. All rights reserved.