Переменная среды набора (бионическая) UBUNTU 18.04 - Crontab

Во-первых, жаль о моем английском языке.

Моя ситуация:

  • Имейте Ubuntu 18.04
  • Хочу выполниться с crontab Python и sh сценариями
  • Результат:/usr/lib/oracle/12.2/client64/bin/sqlplus: ошибка, в то время как загрузка совместно использовала библиотеки: libsqlplus.so: не может открыть файл общего объекта: Никакой такой файл или каталог

Переменные, которые я хочу добавить, определяются как это:

export ORACLE_HOME=/usr/lib/oracle/12.2/client64
export PATH=$PATH:$ORACLE_HOME/bin
export OCI_LIB_DIR=$ORACLE_HOME/lib
export OCI_INC_DIR=/usr/include/oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME

Я настраиваю переменную среды во многих отношениях для предотвращения этой ошибки:

  • ~/.bashrc
  • ~/.profile
  • /etc/environment
  • Создание myvars.sh файл в/etc/profile.d

Проблема состоит в том, когда я настраиваю переменные для своего пользователя (в ~/.profile, например), и я выполняюсь на терминальном одном Python или sh сценарии, которые используют соединение SQL, концы хорошо, и не дает ошибки. Но то, когда Python, выполняются через crontab, появляется в журнале ошибка:

/usr/lib/oracle/12.2/client64/bin/sqlplus: error while loading shared libraries: libsqlplus.so: cannot open shared object file: No such file or directory

я считал в других потоках форума это ~./bash_profile используется для, определяют переменные среды, но не имеют этого файла.спасибо

3
задан 25 July 2018 в 17:11

2 ответа

cron задания выполнений в его собственной минимальной среде и самостоятельно не читают ни одного из файлов запуска оболочки, таких как те, которые в /etc/profile.d/ - по умолчанию это - просто что-то как

LANGUAGE=en_CA:en
HOME=/home/steeldriver
LOGNAME=steeldriver
PATH=/usr/bin:/bin
LANG=en_CA.UTF-8
SHELL=/bin/sh
PWD=/home/steeldriver

У Вас есть несколько опций:

  1. установите переменные в сценарии и выполните это от cron. В случае сценариев оболочки это легко (просто экспортируют их наверху сценария - или получают файл среды, если Вы предпочитаете). Поскольку Python пишет сценарий Вас, может найти самым легким перенестись python звоните в сценарии оболочки, где можно настроить среду сначала.

  2. определите среду как последовательность name = value пары в crontab как

    ORACLE_HOME = /usr/lib/oracle/12.2/client64
    * 5 * * * /path/to/some/executable
    

    (пробелы позволяются вокруг = так как это не сценарий); однако обратите внимание, что этот метод не разворачивает переменные, таким образом, Вы не можете сделать материала как PATH=$PATH:/whatever

Посмотрите man 5 crontab для деталей.

1
ответ дан 1 December 2019 в 17:27

Так как я не хочу беспокоить любого языком кроме английского языка и предложением в комментариях, я попытаюсь сделать две версии ответа, один на английском и другом на испанском языке. Испанский язык, так как я принимаю (и это кажется мне правильно) является родным языком корреспондента, и я хочу объяснить быстрым способом к нему.

Можно определить переменную ПУТИ в сценарии и экспортировать их туда. В целом, cronjobs выполненный в оболочке с очень небольшим ПУТЕМ. В Вашем сценарии определяют переменную ПУТИ и добавляют, что показывают при выполнении в терминале echo $PATH

Или что-то, что можно сделать, если у Вас уже есть необходимая конфигурация в Вашем ~/.bashrc в Вашем источнике использования сценария удара/home/your_user/.bashrc

И после определения Вашей переменной ПУТИ в Вашем скрипте, который Вы запустите, определите переменные, что Вы вставляете свое объяснение, то есть, у Вас должно быть что-то вроде этого:

#!/bin/bash

PATH=/usr/local/bin:/usr/bin:/bin
export ORACLE_HOME=/usr/lib/oracle/12.2/client64 
export PATH=$PATH:$ORACLE_HOME/bin 
export OCI_LIB_DIR=$ORACLE_HOME/lib
OCI_INC_DIR=/usr/include/oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME

python your_program.py

Файлы как .bashrc и .bash_profile, файлы, которые читаются, когда Вы запускаете терминал, но в случае cronjob, они не читаются (если Вы не позволяете его с источником/home/your_user/.bashrc). Цель этих файлов состоит в том, что перед стать в ударе Вам установили конфигурации как переменные среды, псевдонимы, и т.д. В сценарии, который работает в cronjob, можно сделать то же, объявить переменные вручную или загрузить их "источником"

Теперь на испанском языке.

Никакая sé СИ te entendí bien pero, por lo que entendí, терминал tienes un problema en el cual puedes ejecutar un script desde tu, pero cuando tratas de ejecutarlo en un cronjob, te lanza el error descrito.

Puedes устройство определения la путь переменной сценарий dentro de tu, y exportarlas ahí mismo. Por lo общий los cronjobs se ejecutan en una shell подставляют окружающую среду ООН muy reducido. Сценарий Dentro de tu определяет la путь переменной y agrégale lo que se muestra al ejecutar en la terminal echo $PATH

O алгоритм que puedes hacer es, si ya tienes la configuración necesaria en tu ~/.bashrc, сценарий dentro de tu de колотит США source /home/tu_usuario/.bashrc

Путь переменной Y después de definir tu сценарий en tu que correras, определите las переменные que pusiste en tu caso, es decir, алгоритм te tendría que quedar así

#!/bin/bash

PATH=/usr/local/bin:/usr/bin:/bin
export ORACLE_HOME=/usr/lib/oracle/12.2/client64 
export PATH=$PATH:$ORACLE_HOME/bin 
export OCI_LIB_DIR=$ORACLE_HOME/lib
OCI_INC_DIR=/usr/include/oracle/12.2/client64
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$ORACLE_HOME/lib:$ORACLE_HOME

python tu_programa.py

Лос archivos Комо .bashrc y .bash_profile, сын archivos que se leen cuando inicias una terminal, pero en el caso de un cronjob, estos никакой se leen (menos que lo permitas подставляют el источник/home/tu_usuario/.bashrc). Пластина El de estos archivos es que, de Эстар ставок dentro de una terminal, тенге las configuraciones establecidas переменные Комо de entorno, псевдоним, и т.д. En сценарий ООН бур que se dentro de un cronjob puedes hacer lo mismo, оператор объявления las переменные mano o cargarlas подставляют "источник".

0
ответ дан 1 December 2019 в 17:27

Другие вопросы по тегам:

Похожие вопросы: