Импорт пакетов, которые впоследствии устанавливаются (по умолчанию отсутствуют в дистрибутиве 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 успешно импортируются