Соединение с Oracle db (cx_Oracle) не работает, когда запланировано из crontab, но работает автономно

1

У меня есть сценарий python (3.6), который делает некоторые вещи с данными, полученными из Oracle DB. Тогда у меня есть сценарий оболочки для автоматизации, который выполняет скрипт. I, чем планировать выполнение такой оболочки в crontab.

Если я выполняю оболочку как автономную (sh shell.sh), она отлично работает, а когда она запускается как соединение crontab с соединением Oracle DB, → class 'cx_Oracle.DatabaseError'

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

#!/usr/bin/python3.6
# coding: utf-8
import pandas as pd
import cx_Oracle
try:
    conn = cx_Oracle.connect(username/pwd@hostname:port/db_name)
    query = """SELECT * FROM schema.table"""
    df = pd.read_sql(query, con = conn)
except:
    print(sys.exc_info()[0])
    raise
    sys.exit(1)

Оболочка делает что-то вроде этого:

#!/usr/bin/env bash
if [something]
then
    python3.6 pyscript.py
fi

Результат crontab -l:

* * * * * cd /root/workindirectory ; sudo sh shell.sh >> test.out

Спасибо всем за любую помощь.

EDIT: указать, что как оболочки, так и скрипты python имеют 777 разрешений

Теги:
python-3.x
cron
cx-oracle

1 ответ

0
Лучший ответ

Прошу прощения, поскольку я думаю, что это был дубликат пакета cx_Oracle. Не работает внутри Crontab

Поскольку cron не загружает профиль bash, я нашел решение, экспортирующее ORACLE_HOME и LD_LIBRARY_PATH в сценарий оболочки. Как указано в связанном вопросе, строки, которые необходимо добавить:

export ORACLE_HOME=/usr/lib/oracle/<version>/client(64)
export LD_LIBRARY_PATH=$ORACLE_HOME/lib:$LD_LIBRARY_PATH

Ещё вопросы

Сообщество Overcoder
Наверх
Меню