python在通过crontab运行时不提取zipfile

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python在通过crontab运行时不提取zipfile相关的知识,希望对你有一定的参考价值。

#!/usr/bin/python
import requests, zipfile, StringIO, sys
extractDir = "myfolder"
zip_file_url = "download url"
response = requests.get(zip_file_url)
zipDocument = zipfile.ZipFile(StringIO.StringIO(response.content))
zipinfos = zipDocument.infolist()
for zipinfo in zipinfos:
    extrat = zipDocument.extract(zipinfo,path=extractDir)

系统配置

  1. Ubuntu OS 16.04
  2. Python 2.7.12

$ python extract.py当我使用上面的命令在终端上运行代码时,它正常工作并创建文件夹并将文件解压缩到其中。

同样,当我使用sodu权限创建一个cron作业时,代码会执行,但不会创建任何文件夹或提取文件。

crontab命令: -

40 10 * * * /usr/bin/sudo /usr/bin/python /home/ubuntu/demo/directory.py > /home/ubuntu/demo/logmyshit.log 2>&1

也试过了

40 10 * * * /usr/bin/python /home/ubuntu/demo/directory.py > /home/ubuntu/demo/logmyshit.log 2>&1

备注:

  1. 我检查了syslog,它说cron运行成功
  2. 上面的代码没有错误
  3. 还通过chmod + x filename.py使python程序可执行

请帮助我哪里出错了。

答案

Oups,在crontab中运行Python脚本没有什么不妥,但是很多坏事都可能发生,因为环境不是你习惯的环境。

当您键入交互式shell python directory.py时,PATH和所有必需的PYTHON环境变量已设置为登录和交互式shell初始化的一部分,默认情况下当前目录是您的主目录或您当前所在的目录。

当从crontab运行相同的命令时,未指定当前目录(但可能不是您所期望的),PATH仅是/bin:/usr/bin并且未设置python环境变量。这意味着您必须在crontab文件中调整环境变量,直到获得正确的Python环境,并设置当前目录。

另一答案

我有一个非常类似的问题,结果证明cron不喜欢导入matplotlib,我最终必须指定Agg后端。我通过在每一行之后放置日志语句来计算它,看看程序在它被淘汰之前得到了多远。当然,我的日志是空的,这让我觉得它在进口上崩溃了。

TLDR:记录脚本中的每一行

以上是关于python在通过crontab运行时不提取zipfile的主要内容,如果未能解决你的问题,请参考以下文章

如何运行python自动通过CRONTAB打开浏览器?

从 crontab 在 vi​​rtualenv 中运行 python 方法

通过 crontab 执行 Python 脚本

在python中提取.zip

有没有办法运行来自 bash 的 zip 文件中的 python 脚本?

怎么从zip里提取文件 Python