3 Replies Latest reply: Sep 21, 2009 11:55 AM by 390020 RSS

    cx_Oracle error when used in a cron job

    700084
      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
        • 1. Re: cx_Oracle error when used in a cron job
          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
          ..
          • 2. Re: cx_Oracle error when used in a cron job
            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
            • 3. Re: cx_Oracle error when used in a cron job
              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!