python 包不适用于从 cron 执行的脚本

Posted

技术标签:

【中文标题】python 包不适用于从 cron 执行的脚本【英文标题】:python packages not available to script executed from cron 【发布时间】:2019-03-01 16:08:33 【问题描述】:

我开发了一个 python Flask API 并将其部署在 aws ebs 上。 Flask API 按预期工作。 Flask API 需要我安装的几个 python 包,方法是将它们添加到: requirements.txt

我还安装了一个 python 脚本,它是与 Flask API 分开的 py 文件。它计划每天运行,由 cron 执行。

当我设置 cron 时,我得到一个找不到模块的执行错误:

ModuleNotFoundError: No module named 'pandas'

但是模块是由requirements.txt 安装的,并且可用于 Flask API 代码。 import pandas 是如何与 Flask API 一起工作,但无法用于由 cron 执行的 python 脚本的?

【问题讨论】:

您的代码是否在虚拟环境中运行,如果是,cron 条目是否设置为在同一环境中运行? 您可能需要将您的 cron 行设置为 workon myenv && python /path/to/script.py 【参考方案1】:

@arudzinska 是对的。我的案例是使用 Elastic Beanstalk AWS 和 cronjob,它们与 pandas 有相同的问题(没有名为“pandas”的模块)。 我使用上面的 cmets 并尝试找到 pandas 包的位置,然后找到安装 requirements.txt 包的 python 路径并将它们全部放在 .config 文件中: 1. 熊猫路径:

find . -name pandas ./opt/python/run/venv/lib64/python3.6/site-packages/pandas

    Python 路径

2.1。进入控制台的系统路径是什么

eb ssh
which python3

/usr/bin/python3

2.2。找到你的 python 路径

find . -name python

./opt/python/run/baselineenv/bin/python ./opt/python/run/venv/bin/python

    应用文件

    find . -name apps.py

/opt/python/current/app/apps.py

    修改了 .ebextensions 处的 cronjob.config 文件

files: "/etc/cron.d/mycron": mode: "000644" owner: root group: root content: | 15 6 * * * root echo $(date) >> /tmp/cron.log; /usr/local/bin/myscript.sh >> /tmp/cron_py.log 2>&1;

"/usr/local/bin/myscript.sh":
    mode: "000755"
    owner: root
    group: root
    content: |
        #!/bin/bash

        date > /tmp/date
        # Your actual script content
        /opt/python/run/venv/bin/python3 /opt/python/current/app/apps.py

        exit 0

命令: remove_old_cron: 命令:“rm -f /etc/cron.d/mycron.bak”

现在一切正常。

【讨论】:

【参考方案2】:

Cron 作业在您的环境之外运行,这意味着它们没有您的 $PATH 和其他环境变量(this 答案中的更广泛描述),这使得无法找到某些程序。你应该做的是让你的 Python 脚本执行包装在一个 bash 脚本中,在开始时你导出所有需要的环境变量(或者通常让它使用你的环境)。然后,用你的 cron 执行这个 bash 脚本。

【讨论】:

以上是关于python 包不适用于从 cron 执行的脚本的主要内容,如果未能解决你的问题,请参考以下文章

Cron作业无法执行写入文本文件的python脚本

从批处理脚本编写 Python 脚本不适用于一个命令

Cron,以root身份执行bash脚本,但一部分(Python脚本)以用户身份执行

PHP:要求路径不适用于 cron 作业?

无法使用cron每分钟执行一次python 3脚本

cron 作业不适用于 codeigniter 2.2.5