libclntsh.so.11.1: не удается открыть общий объектный файл. - PullRequest
21 голосов
/ 25 апреля 2010

Я хочу запланировать задачу в Linux с помощью icrontab, и задача написана на python и должна импортировать модуль cx_Oracle, поэтому я экспортирую ORACLE_HOME и LD_LIBRARY_PATH в .bash_profile ,но возникает ошибка:

libclntsh.so.11.1: невозможно открыть общий объектный файл.

Поскольку можно выполнить задачу, выполнив команду в оболочке, например:

python a.py  # ok

Я изменяю задачу в icrontab на сценарий оболочки, который вызывает мой сценарий Python,но исключение повторилось?

# the shell script scheduled in icrontab
#! bash 
python a.py    

Не могли бы вы помочь, как это сделать?

Ответы [ 11 ]

17 голосов
/ 25 апреля 2010

Возможно, вы хотите указать PATH - а также ORACLE_HOME и LD_LIBRARY_PATH - чтобы cron(1) знал, где найти двоичные файлы.
Прочитайте "5 Crontab environment" здесь .

7 голосов
/ 26 декабря 2012

LIBS находятся в /u01/app/oracle/product/11.2.0/xe/lib (для Oracle XE) или аналогичный.

Вы должны добавить этот путь к /etc/ld.so.conf или, если этот файл показывает только местоположение включения, как в отдельном файле в каталоге /etc/ld.so.conf.d

У меня есть oracle.conf в /etc/ld.so.conf.d, только один файл с путем. Ничего другого.

Конечно, не забудьте запустить ldconfig как последний шаг.

3 голосов
/ 25 апреля 2010

Cron не загружает профиль пользователя при запуске задачи, и вы должны явно включить профиль в свой скрипт оболочки.

Пример документации

1 голос
/ 02 февраля 2017

Если у вас есть проблема с libclntsh.so, необходимо создать символическую ссылку для libclntsh.so от /usr/lib/oracle/11.2/client64/lib до /usr/lib

1 голос
/ 04 марта 2015

Этот пост помог мне решить аналогичную проблему с помощью ссылки базы данных PostgreSQL на Oracle, используя oracle_fdw.

Я установил oracle_fdw, но когда я попытался CREATE EXTENSION oracle_fdw;, я получил error could not load library libclntsh.so.11.1: cannot open shared object file: No such file or directory.

Я проверил $ORACLE_HOME, $PATH и $LD_LIBRARY_PATH.

Это сработало только ПОСЛЕ того, как я поместил общую библиотеку Oracle в общую библиотеку Linux

echo /opt/instantclient_11_2 > oracle.conf
ldconfig
1 голос
/ 25 апреля 2010

Я столкнулся с этой же проблемой в прошлые выходные, когда мне нужно было использовать cx_Oracle. Потратив много времени, пытаясь изменить переменную LD_LIBRARY_PATH для включения директивы $ ORACLE_HOME / lib, где находится libclntsh.so, я решил проблему, создав символические ссылки из всех библиотек Oracle xlibx.so в / lib / xlibx .так. Это, конечно, не самое «чистое» решение, но оно имеет хорошие шансы на работу, не вызывая особых проблем:

 cd $ORACLE_HOME/lib
 for f in `ls ./*.so*`; do;
   sudo ln -s $ORACLE_HOME/lib/$f /lib/$f 
 done

После того, как я это сделал, cx_Oracle работал как шарм.

0 голосов
/ 10 мая 2019

Мне пришлось установить зависимость

оракул-instantclient12.2 основного-12.2.0.1.0-1.x86_64

0 голосов
/ 04 июня 2018

Для того, чтобы кто-нибудь еще пришел сюда, лучше всего обновить cx_Oracle до последней версии (6+). Эта версия вообще не нуждается в установке LD_LIBRARY_PATH.

0 голосов
/ 31 марта 2018

Я скопировал все файлы библиотеки с носителя установщика database / stage / ext / lib в $ ORACLE_HOME / lib , и это решило проблему.

0 голосов
/ 08 ноября 2017

У меня всегда есть эта проблема, я могу решить, запустив код ниже: export LD_LIBRARY_PATH = / opt / oracle / instantclient: $ LD_LIBRARY_PATH

enter image description here

OBS: этот код я сохранил в файле конфигурации, потому что я всегда его использую. удачи.

...