2017-05-05 3 views
0

J'utilise la bibliothèque cx_Oracle dans mon script python. Mon code fonctionne bien si je l'exécute directement par un script python à partir du terminal Linux mais quand je le mets dans crontab, j'obtiens une erreur de suivi. DatabaseError: DPI-1047: La bibliothèque Oracle Client ne peut pas être chargée: libclntsh.so: impossible d'ouvrir le fichier objet partagé: aucun fichier ou répertoire de ce type. Voir https://oracle.github.io/odpi/doc/installation.html aidecx_Oracle Package Ne fonctionne pas à l'intérieur de Crontab

DPI-1005: incapable d'acquérir environnement Oracle gérer !! retraçage (le plus récent appel dernier): import cx_Oracle !! DatabaseError: DPI-1005: incapable d'acquérir environnement Oracle gérer

J'ai googlé ce problème et il semble que certaines variables d'environnement manquent quand il a couru en utilisant crontab. J'essaie d'exporter dans crontab mais cela ne fonctionne pas.

export LD_LIBRARY_PATH = '/ usr/lib/oracle/11.2/client64/lib'

Si je retire paquet cx_Oracle autre code fonctionne très bien. Je n'ai qu'une seule version de python installée sur ma machine.

Quelle est votre version de Python? Est-ce 32 bits ou 64 bits? Python 2.6. 64 bits

Quelle est votre version de cx_Oracle? Version 6.0b1

Quelle est votre version du client Oracle (par exemple, Instant Client)? Comment a-t-il été installé ? Où est-il installé? oracle-instantclient11.2-devel-11.2.0.4.0-1.x86_64.rpm

Quel est votre système d'exploitation et votre version? CentOS 6.7

Quelles variables d'environnement avez-vous définies? Comment les avez-vous mis exactement? export LD_LIBRARY_PATH = '/ usr/lib/oracle/11.2/client64/lib'

Répondre

0

De toute évidence, cron ne charge pas le profil bash, vous devrez donc écrire un wrapper. Donc, écrivez un wrapper bash qui exporte les variables nécessaires et appelle le script. Puis appelez ce wrapper à partir de crontab. Lorsque cela fonctionne, vous savez que vos variables n'ont pas été correctement exportées pour l'utilisateur dont vous avez édité le crontab.

Remarque: Vous pouvez les ajouter dans /etc/bashrc et il sera alors en place pour tous les utilisateurs, si vous avez un accès root.

Vous pouvez également créer un wrapper générique et les objets cron les envoyer via le wrapper.

my_bash_wrapper.sh

#!/bin/bash 

. ~/.bash_profile 
"$0" 

charmées Cron:

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