繁体   English   中英

从cronjob运行时,Python找不到自定义安装的模块

[英]Python does not find custom installed modules when running from a cronjob

我正在尝试使用cronjob将python脚本设置为每两分钟运行一次,下面是crontab行。 python脚本由下面发布的shell脚本script.sh调用。 此python脚本启动selenium Webdriver,收集一些数据并将其保存到csv文件中。 也有一个摘要。

crontab中

    */2 * * * * export DISPLAY=:0 && /home/me/workspace/project/script.sh > /home/me/workspace/project/cron.log 2>&1

出口DISPLAY =:0是需要在一个cronjob运行硒,因为看到这里 此位(> /home/me/workspace/project/cron.log 2>&1)将输出和错误记录到cron.log文件中。

script.sh

    #!/bin/bash
    python3 /home/me/workspace/project/foo.py

foo.py

    from datetime import datetime
    from selenium import webdriver
    from pyvirtualdisplay import Display

    display = Display(visible=0, size=(800, 600))
    display.start()
    with webdriver.Chrome() as driver:
        #do some scraping and save to csv
        pass

当我手动运行script.sh时,一切运行顺利,没有错误。 但是,当我设置crontab时,脚本将失败。 cron.log文件显示:

    Traceback (most recent call last):
    File "/home/me/workspace/project/foo.py", line 7, in <module>
        from selenium import webdriver
    ImportError: No module named 'selenium'

这表示未安装硒,但是pip3冻结了。 grep硒产量:

    $ pip3 freeze | grep selenium
    selenium==3.13.0

这表明已安装了硒(如预期的那样,因为手动启动时脚本运行良好)。 如果我注释掉硒行,则另一个库pyvirtualdisplay也会发生相同的情况。 因此,问题在于,由于某种原因,当通过cronjob运行时python无法找到自定义安装的模块。 我已经尝试过将'python3'替换为'/ usr / bin / env python3'或'/ usr / bin / python3'及其它的其他变体,但无济于事。

如果有人可以提出解决方案的提示,我将不胜感激,谢谢。

#!/bin/bash
python3 /home/me/workspace/project/foo.py

我认为这是您的问题。 @Martijn Pieters说它是路径问题时很关注。 您需要确保您要调用的“ python3”是已安装硒的python3。 无论您在哪里冻结pip3,都需要确保cron能够看到。

当我使用cronjobs时,我的anaconda virtualenv会明确运行该作业,如下所示:

/home/username/anaconda/envs/python3/bin/python /home/me/workspace/project/foo.py

尝试将当前的$ PATH值放在crontab的开头,即

PATH=/usr/local/bin:/usr/local/sbin......whatever echo $PATH outputs.....
* * * * * crontasks

默认情况下,cron不尊重.bashrc / .bash_profille和其他一些东西。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM