импорт пакетов paramiko и mysql.connector не работает при запуске в качестве задания cron - PullRequest
0 голосов
/ 24 декабря 2018

Импорт пакетов, которые впоследствии устанавливаются (по умолчанию отсутствуют в дистрибутиве python для rhel 7.6), не работает при запуске в качестве задания cron

Hi Team,

У меня есть Python (2.7)скрипт, который импортирует пакет paramiko.Сценарий может успешно импортировать пакет paramiko при запуске от имени пользователя (root или ftpuser) после входа в систему, но не может импортировать его при запуске из задания cron.Я опробовал различные варианты, представленные на блестящих страницах переполнения стека, как показано ниже, но, к сожалению, не смог решить эту проблему.1) Crontab не запускает мой скрипт на python

Я указал путь к пакету paramiko и убедился, что он успешно получен в конце сценария, зарегистрировав его при запуске как задание cron, а также ядали chmod -R 777 разрешение на папку paramiko в /opt/rh/python27/root/usr/lib/python2.7/site-packages месте.Тем не менее импорт не работает, когда он запускается как задание cron

Я создал сценарий оболочки и попытался вызвать сценарий python с помощью with в сценарии и настроил сценарий оболочки в задании cron, но кажется, что сценарий python не был вызван

Я проверил, что на сервере присутствует только одна установка python, и поэтому я использую правильный путь

Я отключил параметр selinux и попытался после перезагрузки, но проблема все еще сохраняется

Обратите внимание, что проблема существует не только для пакета paramiko, но и для других пакетов, которые впоследствии были установлены, например, mysql.connector и т. Д.

Update1

Это должно быть как-то связано сспособ установки пакета paramiko, поскольку сценарий может даже импортировать другие пакеты по тому же пути, что и у paramiko, и разрешения для них обоих выглядят одинаково, с той лишь разницей, что в предыдущем случае используется дистрибутив python, развернутый с использованием url https://access.redhat.com/solutions/1519803. Не могу понять, чтоЭто неправильно при выполнении шагов установки, так как я устанавливаю его как root после выполнения sudo su и установки umask на 0022. Я делаю pip-инсталляцию parmiko и python-crontab, как указано на их сайтах, и у обоих одинаковая проблема

Еще одна интересная вещь, хотя у меня есть код для регистрации исключения вокруг неудачного оператора импорта, он никогда не регистрирует исключение, но кажется, что сценарий останавливает / зависает при импорте статистики

Пожалуйста, помогите решить эту проблему ...

КОД ПИТОНА

#!/usr/bin/env python  
import sys  
import logging  
import os

def InitLog():  
    logging.basicConfig(
        level=logging.DEBUG,
        format='%(asctime)s %(levelname)s %(message)s',
        filename=os.path.dirname(os.path.abspath(__file__)) + '/test_paramiko.log',
        filemode='a'
        )
    logging.info('***************start logging****************')


InitLog()  
logging.info('before import')  
logging.info(sys.path)  
try:  
    sys.path.append("/opt/rh/python27/root/usr/lib/python2.7/site-packages") 

    logging.info("sys path appended before import")  
    import paramiko  
except ImportError:  
    logging.ERROR("Exception occured druing import")  

logging.info('after import')

Запись CRONTAB

SHELL=/bin/bash
PATH=/opt/rh/python27/root/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ftpuser/.local/bin:/home/ftpuser/bin
PYTHONPATH=/opt/rh/python27/root/usr/lib64/python27.zip:/opt/rh/python27/root/usr/lib64/python2.7:/opt/rh/python27/root/usr/lib64/python2.7/plat-linux2:/opt/rh/python27/root/usr/lib64/python2.7/lib-tk:/opt/rh/python27/root/usr/lib64/python2.7/lib-old:/opt/rh/python27/root/usr/lib64/python2.7/lib-dynload:/opt/rh/python27/root/usr/lib64/python2.7/site-packages:/opt/rh/python27/root/usr/lib/python2.7/site-packages


*/1 * * * * /opt/rh/python27/root/usr/bin/python /home/ftpuser/Ganesh/test_paramiko.py

#*/1 * * * * /home/ftpuser/Ganesh/test_cron.sh >> /home/ftpuser/Ganesh/tes_cron.txt 2>&1

#*/1 * * * * /home/ftpuser/Ganesh/test_cron.sh

Сценарий оболочки

#!/opt/rh/python27/root/usr/bin/python

export PATH=$PATH:/opt/rh/python27/root/usr/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/ftpuser/.local/bin:/home/ftpuser/bin

export PYTHONPATH=$PYTHONPATH:/opt/rh/python27/root/usr/lib64/python27.zip:/opt/rh/python27/root/usr/lib64/python2.7:/opt/rh/python27/root/usr/lib64/python2.7/plat-linux2:/opt/rh/python27/root/usr/lib64/python2.7/lib-tk:/opt/rh/python27/root/usr/lib64/python2.7/lib-old:/opt/rh/python27/root/usr/lib64/python2.7/lib-dynload:/opt/rh/python27/root/usr/lib64/python2.7/site-packages:/opt/rh/python27/root/usr/lib/python2.7/site-packages

python /home/ftpuser/Ganesh/test_paramiko.py

Ожидаемый результат от моего сценария на Python - запись в лог "после"import "string

Но в настоящее время он печатает только до тех пор, пока" путь sys, добавленный перед импортом ", который также показывает, что обычные пакеты python успешно импортируются

1 Ответ

0 голосов
/ 03 января 2019

Похоже, что теперь это работает после добавления еще одной переменной окружения в crontab, как показано ниже

LD_LIBRARY_PATH = / opt / rh / python27 / root / usr / lib64

...