python don';当运行crontab时,无法提取zipfile

python don';当运行crontab时,无法提取zipfile,python,cron,ubuntu-16.04,Python,Cron,Ubuntu 16.04,系统配置 Ubuntu操作系统16.04 Python 2.7.12 $python extract.py 当我用上面的命令在终端上运行代码时,它工作正常,创建文件夹并将文件解压缩到其中 类似地,当我使用sodu权限创建cron作业时,代码会执行,但不会创建任何文件夹或提取文件 crontab命令:- #!/usr/bin/python import requests, zipfile, StringIO, sys extractDir = "myfolder" zip_file_url = "

系统配置

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

    类似地,当我使用sodu权限创建cron作业时,代码会执行,但不会创建任何文件夹或提取文件

    crontab命令:-

    #!/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)
    
    也试过

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

  • 我检查了系统日志,它说cron正在成功运行
  • 上面的代码没有错误
  • 还通过chmod+x filename.py使python程序可执行

  • 请告诉我哪里出了问题。

    我遇到了一个非常类似的问题,结果是cron不喜欢导入matplotlib,最后我不得不指定Agg后端。我通过在每一行后面放日志语句来了解程序在崩溃之前走了多远。当然,我的日志是空的,这让我知道它在进口时崩溃了


    TLDR:记录脚本中的每一行,在crontab中运行Python脚本并没有什么错误,但是可能会发生很多不好的事情,因为环境不是您习惯的环境

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


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

    cron作业是否正确写入
    logmyshit.log
    文件?为什么尝试使用
    sudo
    运行此操作?你确定你写的日志文件中没有错误吗?你的
    logmyshit.log
    文件的内容和日期是什么?@lxop当我打印一些东西时,它会将其写入我的日志file@tripleee我用sudo运行了这个程序,以确认该程序是用root用户运行的。不过,您建议的修复非常特定于matplotlib。除了
    请求
    ,OP只使用系统库,不需要GUI。我想我的重点是记录每一行,希望能看到它在哪里中断。我打赌导入时会出现一些奇怪的cron系统路径行为。@Fraxr我也尝试了你的方法,打印了我的每一行代码仍然没有错误。还可以尝试一次剥离一个导入的库,看看哪一个阻塞了它。你的建议设置了当前的目录我刚刚添加了
    os.chdir(path)
    在创建目录并解决问题之前。谢谢大家。@JayeshPatil:如果您不再需要这里的帮助,您应该将其中一个答案标记为已接受。
    40 10 * * * /usr/bin/python /home/ubuntu/demo/directory.py > /home/ubuntu/demo/logmyshit.log 2>&1