当 运行 作为 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
当 运行 作为 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