Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/amazon-web-services/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python脚本在crontab中不工作,但在调用其他脚本时工作_Python_Amazon Web Services_Ubuntu 16.04 - Fatal编程技术网

Python脚本在crontab中不工作,但在调用其他脚本时工作

Python脚本在crontab中不工作,但在调用其他脚本时工作,python,amazon-web-services,ubuntu-16.04,Python,Amazon Web Services,Ubuntu 16.04,我有一个python脚本,可以对AWS中所有正在运行的实例的卷进行快照。该脚本在crontab中不起作用,但如果调用其他脚本,它将起作用 我已将cronjob的输出写入一个文件,以下是输出: Traceback (most recent call last): File "completeBackUp2.py", line 2, in <module> import boto3 ImportError: No module named boto3 显然,从命令提示符运行

我有一个python脚本,可以对AWS中所有正在运行的实例的卷进行快照。该脚本在crontab中不起作用,但如果调用其他脚本,它将起作用

我已将cronjob的输出写入一个文件,以下是输出:

Traceback (most recent call last):
  File "completeBackUp2.py", line 2, in <module>
    import boto3
ImportError: No module named boto3

显然,从命令提示符运行脚本和从
cron
运行脚本时,导入路径是不同的

找出什么是导入路径:

$ python
>>> import sys
>>> sys.path
然后将目录列表复制粘贴到脚本的开头,如:

import sys
sys.path = [ ... what you found in the previous step ... ]

import boto3    # this should be AFTER you've made changes to sys.path

显然,从命令提示符运行脚本和从
cron
运行脚本时,导入路径是不同的

找出什么是导入路径:

$ python
>>> import sys
>>> sys.path
然后将目录列表复制粘贴到脚本的开头,如:

import sys
sys.path = [ ... what you found in the previous step ... ]

import boto3    # this should be AFTER you've made changes to sys.path

crontab可能使用了与手动运行时不同的Python版本。Python的每次安装都会加载各自的sys路径,它们可能会有所不同。我遇到了同样的错误,并通过使用
whichpython
的输出修复了这个问题,我在那里手动运行脚本,作为crontab中的命令。更多信息如下

当您通过命令行手动运行脚本时(例如,
python文件,该文件导入了\u boto3.py
),您将使用为该位置配置的任何版本的python(假设您的计算机上有多个python安装)。如果在手动运行python文件的位置运行
哪个python
,您可以看到正在使用哪个python安装。在我的例子中,
的输出是哪个python

~/miniconda3/bin/python
然而,我的crontab正在使用

/usr/lib64/python2.7
(这是AmazonEC2上Python 2.7的标准位置)。因此,将我的crontab从

0 1 * * * python file_that_imports_boto3.py


为我解决了这个问题。希望这有帮助

crontab可能使用了与手动运行时不同的Python版本。Python的每次安装都会加载各自的sys路径,它们可能会有所不同。我遇到了同样的错误,并通过使用
whichpython
的输出修复了这个问题,我在那里手动运行脚本,作为crontab中的命令。更多信息如下

当您通过命令行手动运行脚本时(例如,
python文件,该文件导入了\u boto3.py
),您将使用为该位置配置的任何版本的python(假设您的计算机上有多个python安装)。如果在手动运行python文件的位置运行
哪个python
,您可以看到正在使用哪个python安装。在我的例子中,
的输出是哪个python

~/miniconda3/bin/python
然而,我的crontab正在使用

/usr/lib64/python2.7
(这是AmazonEC2上Python 2.7的标准位置)。因此,将我的crontab从

0 1 * * * python file_that_imports_boto3.py


为我解决了这个问题。希望这有帮助

谢谢你,莱尼克。但在cron上还是同样的错误/usr/bin/python import boto3 import datetime import sys.path=['/opt/scripts/backup'、'/usr/lib/python2.7'、'/usr/lib/python2.7/plat-x86_64-linux-gnu'、'/usr/lib/python2.7/lib-tk'、'/usr/lib/python2.7/lib-old'、'/home/abhishek/.local/lib/python2.7/site-packages'、'/usr/local/lib/python2.7/dist-packages/python2.7']@用户382086您能找到您的
boto
软件包的安装位置并将该路径添加到sys.path:
sys.path.append(boto\u路径)中吗
?您可以通过运行python和导入boto来轻松实现这一点。uuu path uuu应该几乎总是避免直接操纵sys.path。设置PYTHONPATH是非常可取的。当我导入boto+boto时。uu path uu,我得到错误回溯(最近一次调用):文件“”,ImportError中的第1行:没有名为botoThanks lenik的模块。但在cron#!/usr/bin/python import boto3 import datetime import sys.path=['/opt/scripts/backup'、'/usr/lib/python2.7'、'/usr/lib/python2.7/plat-x86_64-linux-gnu'、'/usr/lib/python2.7/lib-tk'、'/usr/lib/python2.7/lib-old'、'/home/abhishek/.local/lib/python2.7/site-packages'、'/usr/local/lib/python2.7/dist-packages/python2.7']@用户382086您能找到您的
boto
软件包的安装位置并将该路径添加到sys.path:
sys.path.append(boto\u路径)中吗
?您可以通过运行python和导入boto来轻松实现这一点。uuu path uuu应该几乎总是避免直接操纵sys.path。设置PYTHONPATH是非常可取的。当我导入boto+boto时。uu path uu,我得到错误回溯(最近一次调用):文件“”,第1行,在ImportError中:没有名为botocron的模块出于安全考虑显式取消设置所有环境变量。这包括PYTHONPATH。为了帮助找到boto3所在的位置:
python-c'import boto3;print(boto3.\uuuu文件\uuuuuuuuu)“
.cron显式地取消设置所有环境变量作为安全问题。这包括PYTHONPATH。为了帮助找出boto3的位置:
python-c”import boto3;print(boto3.\uuuu file\uuuuuuuuu)