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

时间:2018-07-01 15:59:26

标签: python linux python-3.x cron pip

我正在尝试使用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中的硒,如here所示。 此位(> /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也会发生相同的情况。 所以问题在于,由于某种原因,python在通过cronjob运行时未找到自定义安装的模块。我已经尝试用'/ usr / bin / env python3'或' / usr / bin / python3'及其其他变体,无济于事。

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

2 个答案:

答案 0 :(得分:1)

#!/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

答案 1 :(得分:0)

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

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

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