2017-05-05 4 views
0

Ich benutze Cx_Oracle Bibliothek in meinem Python-Skript. Mein Code funktioniert gut, wenn ich direkt vom Linux-Terminal mit Python-Skript ausführen, aber wenn ich es in Crontab setze bekomme ich folgenden Fehler.cx_Oracle Paket Funktioniert nicht in Crontab

!! DatabaseError: DPI-1047: Oracle-Client-Bibliothek kann nicht geladen werden: libclntsh.so: Gemeinsame Objektdatei kann nicht geöffnet werden: Keine solche Datei oder Verzeichnis. Siehe https://oracle.github.io/odpi/doc/installation.html Hilfe

DPI-1005: nicht in der Lage Oracle-Umgebung behandeln !! Traceback (jüngste Aufforderung zuletzt) ​​zu erwerben: Import cx_Oracle !! Database: DPI-1005: nicht in der Lage Oracle-Umgebung zu erwerben behandelt

Ich googelte dieses Problem und es scheint einige Umgebungsvariable zu fehlen, wenn es mit Crontab lief. Ich versuche, in Crontab folgenden zu exportieren, aber es funktioniert nicht.

export LD_LIBRARY_PATH = '/ usr/lib/oracle/11,2/client64/lib'

Wenn ich cx_Oracle Paket anderer Code läuft gut entfernen. Ich habe nur eine Version von Python auf meinem Rechner installiert.

Was ist Ihre Version von Python? Ist es 32-Bit oder 64-Bit? Python 2.6. 64 bit

Was ist Ihre Version von cx_Oracle? Version 6.0b1

Wie lautet Ihre Version des Oracle-Clients (z. B. Instant Client)? Wie war es installiert? Wo ist es installiert? oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

Was ist Ihr Betriebssystem und Version? CentOS 6.7

Welche Umgebungsvariablen haben Sie festgelegt? Wie genau hast du sie gesetzt? export LD_LIBRARY_PATH = '/ usr/lib/oracle/11,2/client64/lib'

Antwort

0

Offensichtlich cron laden nicht die Bash-Profil, so dass Sie einen Wrapper schreiben müssen.

Schreiben Sie also einen Bash Wrapper, der die benötigten Variablen exportiert und das Skript aufruft. Dann rufe diesen Wrapper von crontab auf. Wenn das funktioniert, werden Sie wissen, dass Ihre Variablen nicht ordnungsgemäß für den Benutzer exportiert wurden, dessen crontab Sie bearbeitet haben.

Hinweis: Sie können sie in /etc/bashrc hinzufügen und es wird dann für alle Benutzer vorhanden sein, wenn Sie Root-Zugriff haben.

Sie können auch einen generischen Wrapper erstellen und cron Dinge werden sie durch den Wrapper senden.

my_bash_wrapper.sh

#!/bin/bash 

. ~/.bash_profile 
"$0" 

in cron evozieren:

0 1 * * * /my/loc/my_bash_wrapper.sh my_python_script arg1 arg2