如何从crontab中调用需要使用activate(source env/bin/active)的python脚本?从crontab调用python脚本并激活
6
A
回答
15
virtualenv的激活脚本非常简单。它主要为你的virtualenv的Python解释器设置路径;如果你不在交互式shell中,它所做的其他工作(设置PS1
,保存旧变量等)并不是真的必要。所以,最简单的方法就是用正确的Python解释器,它可以在以下两种方式之一进行启动您的Python脚本:
1.设置Python脚本使用您的virtualenv的Python解释器
假设你的virtualenv的解释是~/virtualenv/bin/python
,你可以把这个路径在你的Python脚本的顶部:
#!/home/user/virtualenv/bin/python
然后从你的crontab启动脚本,为正常。
2.启动在你的cronjob正确的Python解释器的脚本
假设你的脚本是~/bin/cronjob
和你的virtualenv的Python解释为~/virtualenv/python
,你可以把这个在你的crontab:
* * * * * /home/user/virtualenv/python /home/user/bin/crontab
1
我的方法是始终保持crontab尽可能简单,并且处理由crontab调用的脚本中的所有配置。
1)创建一个外壳脚本:例如/var/webapp/cron.sh
#!/bin/sh
PATH="/var/webapp/.env/bin:$PATH"
export PATH
cd /var/webapp/
python test.py
其中/var/webapp/.env/bin是的virtualenv位置。设置PATH,你不需要运行源../activate
2)正确设置你的环境。例如,对于一个Django应用:
#!/usr/bin/env python
import os
from datetime import datetime
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings.production'
os.environ['DJANGO_CONF'] = 'settings.production'
from util.models import Schedule
dset = Schedule.objects.all()
for rec in dset:
print rec
print 'cron executed %s' % datetime.today()
在这个例子中,django的设置位于设置/ production.py
3)最后,编辑/ etc/crontab中。例如,要执行每半小时,每一天:
1,31 * * * * root /var/webapp/cron.sh >> /var/webapp/cron.log
注意,重要的是要生成日志,以帮助您发现错误或调试消息。
相关问题
- 1. 从crontab运行python脚本
- 2. 从crontab运行python脚本
- 3. 用python脚本激活root用户。 (OSX)
- 4. 从脚本中激活URL
- 5. 激活脚本
- 6. 使用python脚本激活virtualenv
- 7. 调用conda源激活bash脚本
- 8. 默认禁用GPIO,并通过python脚本临时激活它
- 9. 调用一个python脚本,并从Javascript
- 10. 的crontab和Python脚本
- 11. Python脚本来激活并保持开放VIRTUALENV
- 12. 从bash脚本中取消激活pythonbrew
- 13. 重新激活python脚本 - Linux bash脚本
- 14. PIPling STDOUT脚本不激活脚本
- 15. 使用GNU并行调用python脚本从bash脚本
- 16. 不从调用crontab中安装的shell脚本调用php脚本
- 17. 如何激活.vim脚本
- 18. 使用sudo python脚本的crontab
- 19. 激活anaconda并从cmd脚本启动web服务器
- 20. 从shell脚本调用python脚本cron
- 21. 从Bash脚本调用python脚本
- 22. 从PHP脚本调用python脚本
- 23. 从Python脚本调用scons
- 24. 从Jamfile调用python脚本
- 25. 从python脚本调用mongoimport
- 26. 从Python脚本调用类
- 27. 从python脚本调用gdb
- 28. 从awk调用python脚本
- 29. 从Python调用Perl脚本
- 30. 从Applescript调用Python脚本
easy_install库的路径怎么样? – Timmy 2010-05-27 19:58:08
如果它们也安装在虚拟环境中或“全局”站点包目录中,则应该找到它们;否则,你将不得不把它们放在你的'$ PYTHONPATH'中,它有点丑,但是可以通过'/ usr/bin/env'或者其他来启动Python bin来完成。 – mipadi 2010-05-27 20:09:44
最后的代码块应该可能以“/ home/bin/cronjob”结尾 – 2010-08-06 22:06:59