2010-05-27 146 views

回答

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 
+0

easy_install庫的路徑怎麼樣? – Timmy 2010-05-27 19:58:08

+2

如果它們也安裝在虛擬環境中或「全局」站點包目錄中,則應該找到它們;否則,你將不得不把它們放在你的'$ PYTHONPATH'中,它有點醜,但是可​​以通過'/ usr/bin/env'或者其他來啓動Python bin來完成。 – mipadi 2010-05-27 20:09:44

+1

最後的代碼塊應該可能以「/ home/bin/cronjob」結尾 – 2010-08-06 22:06:59

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 

注意,重要的是要生成日誌,以幫助您發現錯誤或調試消息。