[英]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.