cron定时运行python virtualenv中的python程序

virtualenv路径 /home/test/py/python

virtualenv中使用pip install beautifulsoup了,现在/home/test/py/下有test.py,里面 from bs4 import BeautifulSoup 来使用bs

直接 /home/test/py/python/bin/python /home/test/py/test.py 执行正常 但 crontab -e 新建一个cron,内容如下:

10 10 * * * /home/test/py/python/bin/python /home/test/py/test.py

却没有执行结果。是哪里有问题?

阅读 18.4k
4 个回答

我之前也遇到过这个问题,我的解决办法是这样的,创建一个shell脚本,然后在shell脚本里面调用python,代码如下:

!/bin/bash

cd /var/PyEnvs/InstaHub-V1/
source ./bin/activate
cd site/tasks
/var/PyEnvs/InstaHub-V1/bin/python task_push_message.py
deactivate

InstaHub-V1是我的python虚拟环境,这个脚本已经跑了2个月了,目前为止没有发现问题

Crontab激活virtualenv的python环境运行脚本如下两种简单方法都有效:
方法一:设置python脚本运行时的解释器路径
在python脚本行首加上解释器路径,crontab中正常启动脚本即可。

#!/home/test/py/python/bin/python

方法二:crontab中设置启动python脚本的解释器路径

10 10 * * * /home/test/py/python/bin/python /home/test/py/test.py

如果脚本所在的project路径需要加到PYTHONPATH中,则先cd到这个路径下在执行上述命令即:

10 10 * * * cd /home/test/py && /home/test/py/python/bin/python home/test/py/test.py

原文链接:Crontab激活virtualenv的python环境运行脚本

先确认这一条计划任务是否被执行了:

10 10 * * * /home/test/py/python/bin/python /home/test/py/test.py > /home/test/test.log

如果出现了 test.log, 那么说明这一条确实被执行了,但是那个 test.py 没有按照预期来执行。
在 crontab 里最主要的问题还是环境变量的问题,因为 .bashrc 不会被执行,所以很多环境变量都没有。
你可以检查一下 test.py 是否依赖某个环境变量,或者依赖当前工作目录
可以先试着在 test.py 里写个 Hello World, 看看是否会被输出到 test.log.

新手上路,请多包涵

由于crontab默认是用的是sh, source activate后无法起效,只需在crontab的前面指定SHELL即可

SHELL=/bin/bash
*/10 * * * * source /path/to/virtualenv/bin/activate && /path/to/build/manage.py some_command > /dev/null
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏