使用activate从crontab调用python脚本

时间:2010-05-27 19:30:34

标签: python crontab virtualenv

如何从crontab调用需要使用activate(source env / bin / active)的python脚本?

2 个答案:

答案 0 :(得分:17)

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/cronjob

答案 1 :(得分:1)

我的方法始终是让 crontab 尽可能简单,并处理crontab调用的脚本内的所有配置。

1)创建一个shell脚本:例如/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设置位于settings / production.py

3)最后,编辑/ etc / crontab。例如,每天半小时执行一次:

1,31 * * * *  root   /var/webapp/cron.sh >> /var/webapp/cron.log

请注意,生成日志以帮助您查找错误或调试消息非常重要。