Skip to Main Content

DevOps, CI/CD and Automation

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Interested in getting your voice heard by members of the Developer Marketing team at Oracle? Check out this post for AppDev or this post for AI focus group information.

cx_Oracle error when used in a cron job

700084Sep 19 2009 — edited Sep 21 2009
Hi everyone,
I've installed cx_Oracle and used it successfully in a number of python scripts, but it's throwing an error when I try to run one of those python scripts as a cron job.

Below is the traceback that I'm logging from the cronjob:
 
<<snipped>>
  import cx_Oracle
  File "build/bdist.linux-i686/egg/cx_Oracle.py", line 7, in <module>
  File "build/bdist.linux-i686/egg/cx_Oracle.py", line 6, in __bootstrap__
ImportError: libclntsh.so.11.1: cannot open shared object file: No such file or directory
Again, the script works fine if I run it manually (i.e. "python script.py"). I've googled around for hours and can't seem to figure this out.

Anyone have suggestions?
It's greatly appreciated.
Serdar

Comments

390020
I would say there's something defined in your environment that's not available at cron time. For example, LD_LIBRARY_PATH, it might be defined in your ~/.bashrc
You could try modify the os environ before importing cx_Oracle.
E.g:

import os
os.environ['LD_LIBRARY_PATH'] = ':~/oracle/product/10.2.0/client/lib'
import cx_Oracle
..
700084
Mariano wrote:
I would say there's something defined in your environment that's not available at cron time. For example, LD_LIBRARY_PATH, it might be defined in your ~/.bashrc
This is precisely what turned out to the be problem. I had a number of environment variables set in my .bashrc, including ORACLE_HOME, LD_LIBRARY_PATH and TNS_NAME.
You could try modify the os environ before importing cx_Oracle.
E.g:

import os
os.environ['LD_LIBRARY_PATH'] = ':~/oracle/product/10.2.0/client/lib'
import cx_Oracle
..
The above approach did not work in my case. Instead, I had to copy all of the variables mentioned above from my .bashrc into the top of my crontab, so that it appeared like this:
MAILTO=user@mail.com
SHELL=/bin/bash
PATH=/usr/sbin:/usr/bin:/sbin:/bin:/usr/lib/oracle/11.1/client/lib/
ORACLE_HOME='/usr/lib/oracle/11.1/client'
LD_LIBRARY_PATH ='/usr/lib/oracle/11.1/client/lib'
TNS_ADMIN  =  '/home/username'  # where my tnsnames.ora file lives

# m h  dom mon dow   command
<<snipped>>
Now everything's working like a charm. Thanks so much for the help Mariano. You rock!

Regards,
Serdar
390020
Glad to know it help you to debug the problem.
It seems I made a mistake in my suggestion (os.environ is a dict, actually it seems I don't really know who to publish in this forum):
import os
os.environ\['LD_LIBRARY_PATH'\] = ':~/oracle/product/10.2.0/client/lib'

anyway... if it works, don't fix it!
1 - 3
Locked Post
New comments cannot be posted to this locked post.

Post Details

Locked on Oct 19 2009
Added on Sep 19 2009
3 comments
11,295 views