失败信息:
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
测试成功.