当 运行 作为 cron 作业时,导入 paramiko 和 mysql.connector 包不起作用

importing paramiko and mysql.connector packages not working when ran as cron job

当 运行 作为 cron 作业

时,导入随后安装的包(默认情况下不存在于 python rhel 7.6 发行版中)不起作用

您好团队,

我有一个导入 paramiko 包的 python(2.7) 脚本。当 运行 作为用户(root 或 ftpuser)登录后,该脚本可以成功导入 paramiko 包,但当 运行 从 cron 作业中导入它时无法导入它。我已经尝试了如下精彩的堆栈溢出页面中提供的各种选项,但不幸的是无法解决问题。 1) Crontab not running my python script

我已经提供了 paramiko 包的路径,并通过在 运行 作为 cron 作业时记录它来验证它在脚本结束时被成功接收,并且我还授予了 chmod -R 777 对 paramiko 文件夹的权限在 /opt/rh/python27/root/usr/lib/python2.7/site-packages 位置。当 运行 作为 cron 作业

时,导入仍然无法正常工作

我已经创建了一个 shell 脚本并尝试从脚本中调用 python 脚本并在 cron 作业中配置了 shell 脚本,但似乎 python未调用脚本

我已确认服务器中只有一个 python 安装,因此我使用的路径正确

我已禁用 selinux 选项并在重启后尝试但问题仍然存在

请注意,该问题不仅存在于 paramiko 包中,还存在于随后安装的其他包中,例如 mysql.connector e t c

更新1

这一定与我安装 paramiko 包的方式有关,因为该脚本甚至可以在与 paramiko 相同的路径中导入其他包,并且它们的权限看起来相同,唯一的区别是前者使用 url https://access.redhat.com/solutions/1519803 部署的 python 发行版。无法弄清楚安装步骤有什么问题,因为我在执行 sudo su 然后将 umask 设置为 0022 后以 root 身份安装它。我按照他们的网站中提到的那样 pip install parmiko 和 python-crontab 并且两者都有同样的问题

另一个有趣的事情是,虽然我有代码来记录失败导入语句的异常,但它从不记录异常,但脚本似乎 halt/hang 在导入语句

请帮助解决这个问题...

PYTHON 代码

#!/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

Shell 脚本

#!/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 脚本的预期结果是记录 "after import" 字符串

但目前它只打印到 "sys path appended before import",这也显示正常的 python 包已成功导入

在向 crontab 添加一个环境变量后,这似乎现在可以正常工作了,如下所示

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